Compare commits
142 Commits
3.13.1
...
wip/gestur
Author | SHA1 | Date | |
---|---|---|---|
38509081e7 | |||
f659b66a9d | |||
247a42ccc4 | |||
a50a463eb3 | |||
dc7cca7e6d | |||
38032bf820 | |||
624314ee3e | |||
ed6dc326d1 | |||
13b4290e55 | |||
f4e0f6385c | |||
41a3f10938 | |||
d850c8599e | |||
ec288d0e68 | |||
0b92cd0772 | |||
c7f5f172dd | |||
84bc445593 | |||
365bfcae12 | |||
47c9243271 | |||
8c67a70db0 | |||
5f4591e24c | |||
37ef0e4bed | |||
7d7b92419f | |||
309d40a92b | |||
02718357da | |||
cfef107114 | |||
b742b1eed2 | |||
d58be565a1 | |||
522ed3c21d | |||
2fb8781f30 | |||
2bda6db30f | |||
8abd18363c | |||
256bb532a2 | |||
6077e28f95 | |||
83cb26d70e | |||
6d66afc14e | |||
88faee4c79 | |||
66f5e4b44d | |||
772d8692e7 | |||
17f481f6fe | |||
b057e786a4 | |||
8b9904b6d0 | |||
43ae3b8140 | |||
f76dd4d6b2 | |||
079cc39166 | |||
bf0c7f731d | |||
5a8a293614 | |||
c768ee6175 | |||
75c2a723d9 | |||
32240df141 | |||
c532e3f1a5 | |||
b04c79643d | |||
4eca992db8 | |||
c36ca625e6 | |||
238466b3d6 | |||
4f28840a59 | |||
d98c1ba522 | |||
9bbb3e9c85 | |||
2710c56827 | |||
e22ff0e42d | |||
8c74a4fee0 | |||
234b90ac86 | |||
ce46b06f36 | |||
585930123d | |||
5d00c1a5ee | |||
f288c43e6e | |||
b981a591c7 | |||
3b7756b610 | |||
292f87caf7 | |||
ae2751a68b | |||
589becbc79 | |||
4c7fcf272c | |||
e51aecee03 | |||
d98e7dbd4a | |||
1b97778925 | |||
829e7623df | |||
89675c9061 | |||
f9df83802d | |||
e51eb723fc | |||
5b61f2d642 | |||
094669baee | |||
f6b5385495 | |||
524e2df708 | |||
9f887d9a28 | |||
214a41793f | |||
2e40ffc558 | |||
3584887938 | |||
0d6c002b8e | |||
ec714864f2 | |||
1b77149ec9 | |||
93c9e031e3 | |||
3ff4277f86 | |||
2a63267be0 | |||
2b365627ed | |||
b8f0d0f0dc | |||
df1bed941d | |||
604085fdb9 | |||
2d3c81390b | |||
516b8f6bf8 | |||
75fdca0b47 | |||
9f366118f0 | |||
c228a9a89a | |||
e747fcb16f | |||
a72a24ebff | |||
8811ba2ec0 | |||
38d8e465b3 | |||
5b3fb024be | |||
521f5f2b6b | |||
e1b30b2924 | |||
dd85670f8b | |||
625f3a5113 | |||
58c4a6c847 | |||
752aca811c | |||
a4cf0501ee | |||
4c7b992c36 | |||
264a51de3f | |||
625280bcd6 | |||
4f8265f82e | |||
ff07d3a46a | |||
5d11941638 | |||
f1f659571b | |||
c60d13b33e | |||
33060d382b | |||
4b1e412ac3 | |||
659730ab09 | |||
7c3a99b7ed | |||
e7af257814 | |||
c9190294bc | |||
e070e3c44a | |||
fe87de7cec | |||
2519e4f08d | |||
fe304d3c94 | |||
1f4e6872ab | |||
5ade2e7418 | |||
3e7d325e77 | |||
ef04a9d1ed | |||
011fef4b2b | |||
caf6389f79 | |||
c7306449ae | |||
8c45e6fa43 | |||
9504d21297 | |||
0832ca544a | |||
a000a1f76e |
45
NEWS
45
NEWS
@ -1,3 +1,48 @@
|
|||||||
|
3.13.3
|
||||||
|
======
|
||||||
|
* Don't allow closing windows with attached modals [Florian; #729886]
|
||||||
|
* Fix self-restarting on OpenBSD [Antoine; #727763]
|
||||||
|
* Improve behavior of window buttons with compositor menus [Florian; #731058]
|
||||||
|
* Work around atspi-related performance regression [Alejandro; #730118]
|
||||||
|
* Misc bug fixes and cleanups [Florian, Lan, Jasper, Christophe, Debarshi,
|
||||||
|
Zeeshan; #728271, #726460, #703833, #731118, #731220, #695487, #730527,
|
||||||
|
#728170, #731619, #731738, #731882, #731923]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Zeeshan Ali (Khattak), Christophe Fergeau, Adel Gadllah, Antoine Jacoutot,
|
||||||
|
Ting-Wei Lan, Florian Müllner, Alejandro Piñeiro, Debarshi Ray,
|
||||||
|
Carlos Soriano, Jasper St. Pierre, Wim Taymans, Rico Tzschichholz
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Philip Withnall [en_GB], Milo Casagrande [it], Aurimas Černius [lt],
|
||||||
|
Enrico Nicoletto [pt_BR], Kjartan Maraas [nb], Balázs Meskó [hu],
|
||||||
|
Muhammet Kara [tr], Daniel Mustieles [es], Yosef Or Boczko [he],
|
||||||
|
Matej Urbančič [sl], Mattias Eriksson [sv]
|
||||||
|
|
||||||
|
3.13.2
|
||||||
|
======
|
||||||
|
* Make airplane mode menu insensitive in lock screen [Giovanni; #729224]
|
||||||
|
* Don't always extend struts to the screen edge [Florian; #683819]
|
||||||
|
* Fix keynav for alternatives in AltSwitcher [Florian; #727259]
|
||||||
|
* Implement window menus in the shell [Jasper; #726352]
|
||||||
|
* Support resource:/// URLs in GNOME_SHELL_JS envvar [Owen; #730409]
|
||||||
|
* Fix switcher popups with keybindings containing Escape [Rui; #730739]
|
||||||
|
* Update extension-prefs UI to follow GNOME 3 patterns [Florian; #730829]
|
||||||
|
* Add support for fallback app menu in window decorations [Florian; #730752]
|
||||||
|
* Fix keynav escaping open app folders [Florian; #726760]
|
||||||
|
* Misc. bug fixes [Kalev, Florian, Owen; #729429, #728449, #730408, #730753,
|
||||||
|
#730653]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Giovanni Campagna, Piotr Drąg, Kalev Lember, Rui Matos, Florian Müllner,
|
||||||
|
Vadim Rutkovsky, Carlos Soriano, Jasper St. Pierre, Owen W. Taylor
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Ihar Hrachyshka [be], Giovanni Campagna [it], Carles Ferrando [ca@valencia],
|
||||||
|
Daniel Mustieles [es], Aurimas Černius [lt], Enrico Nicoletto [pt_BR],
|
||||||
|
Yosef Or Boczko [he], Marek Černocký [cs], Muhammet Kara [tr],
|
||||||
|
Georges Neto [pt_BR], Andika Triwidada [id]
|
||||||
|
|
||||||
3.13.1
|
3.13.1
|
||||||
======
|
======
|
||||||
* Ensure the currently focused app icon is viewable [Rui; #726759]
|
* Ensure the currently focused app icon is viewable [Rui; #726759]
|
||||||
|
12
configure.ac
12
configure.ac
@ -1,5 +1,5 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[3.13.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[3.13.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
@ -76,7 +76,7 @@ AC_MSG_RESULT($enable_systemd)
|
|||||||
CLUTTER_MIN_VERSION=1.15.90
|
CLUTTER_MIN_VERSION=1.15.90
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
GJS_MIN_VERSION=1.39.0
|
GJS_MIN_VERSION=1.39.0
|
||||||
MUTTER_MIN_VERSION=3.13.1
|
MUTTER_MIN_VERSION=3.13.3
|
||||||
GTK_MIN_VERSION=3.7.9
|
GTK_MIN_VERSION=3.7.9
|
||||||
GIO_MIN_VERSION=2.37.0
|
GIO_MIN_VERSION=2.37.0
|
||||||
LIBECAL_MIN_VERSION=3.5.3
|
LIBECAL_MIN_VERSION=3.5.3
|
||||||
@ -223,6 +223,14 @@ fi
|
|||||||
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
||||||
|
|
||||||
GNOME_COMPILE_WARNINGS([error])
|
GNOME_COMPILE_WARNINGS([error])
|
||||||
|
case "$WARN_CFLAGS" in
|
||||||
|
*-Werror*)
|
||||||
|
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
|
||||||
|
AC_SUBST(AM_CFLAGS)
|
||||||
|
|
||||||
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
||||||
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||||
|
@ -1,6 +1,24 @@
|
|||||||
|
CLEANFILES =
|
||||||
|
|
||||||
desktopdir=$(datadir)/applications
|
desktopdir=$(datadir)/applications
|
||||||
desktop_DATA = gnome-shell.desktop gnome-shell-wayland.desktop gnome-shell-extension-prefs.desktop
|
desktop_DATA = gnome-shell.desktop gnome-shell-wayland.desktop gnome-shell-extension-prefs.desktop
|
||||||
|
|
||||||
|
if HAVE_NETWORKMANAGER
|
||||||
|
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
|
||||||
|
|
||||||
|
servicedir = $(datadir)/dbus-1/services
|
||||||
|
service_DATA = org.gnome.Shell.PortalHelper.service
|
||||||
|
|
||||||
|
CLEANFILES += \
|
||||||
|
org.gnome.Shell.PortalHelper.service \
|
||||||
|
org.gnome.Shell.PortalHelper.desktop
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.service: %.service.in
|
||||||
|
$(AM_V_GEN) sed -e "s|@libexecdir[@]|$(libexecdir)|" \
|
||||||
|
$< > $@ || rm $@
|
||||||
|
|
||||||
# We substitute in bindir so it works as an autostart
|
# We substitute in bindir so it works as an autostart
|
||||||
# file when built in a non-system prefix
|
# file when built in a non-system prefix
|
||||||
%.desktop.in:%.desktop.in.in
|
%.desktop.in:%.desktop.in.in
|
||||||
@ -35,7 +53,6 @@ dist_theme_DATA = \
|
|||||||
theme/filter-selected-rtl.svg \
|
theme/filter-selected-rtl.svg \
|
||||||
theme/gnome-shell.css \
|
theme/gnome-shell.css \
|
||||||
theme/logged-in-indicator.svg \
|
theme/logged-in-indicator.svg \
|
||||||
theme/menu-arrow-symbolic.svg \
|
|
||||||
theme/message-tray-background.png \
|
theme/message-tray-background.png \
|
||||||
theme/more-results.svg \
|
theme/more-results.svg \
|
||||||
theme/noise-texture.png \
|
theme/noise-texture.png \
|
||||||
@ -89,9 +106,11 @@ EXTRA_DIST = \
|
|||||||
$(menu_DATA) \
|
$(menu_DATA) \
|
||||||
$(convert_DATA) \
|
$(convert_DATA) \
|
||||||
$(keys_in_files) \
|
$(keys_in_files) \
|
||||||
|
org.gnome.Shell.PortalHelper.desktop.in \
|
||||||
|
org.gnome.Shell.PortalHelper.service.in \
|
||||||
org.gnome.shell.gschema.xml.in.in
|
org.gnome.shell.gschema.xml.in.in
|
||||||
|
|
||||||
CLEANFILES = \
|
CLEANFILES += \
|
||||||
gnome-shell.desktop.in \
|
gnome-shell.desktop.in \
|
||||||
gnome-shell-wayland.desktop.in \
|
gnome-shell-wayland.desktop.in \
|
||||||
gnome-shell-extension-prefs.in \
|
gnome-shell-extension-prefs.in \
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
[org.gnome.shell.overrides]
|
[org.gnome.shell.overrides]
|
||||||
attach-modal-dialogs = /desktop/gnome/shell/windows/attach_modal_dialogs
|
attach-modal-dialogs = /desktop/gnome/shell/windows/attach_modal_dialogs
|
||||||
button-layout = /desktop/gnome/shell/windows/button_layout
|
|
||||||
edge-tiling = /desktop/gnome/shell/windows/edge_tiling
|
edge-tiling = /desktop/gnome/shell/windows/edge_tiling
|
||||||
workspaces-only-on-primary = /desktop/gnome/shell/windows/workspaces_only_on_primary
|
workspaces-only-on-primary = /desktop/gnome/shell/windows/workspaces_only_on_primary
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Type=Application
|
Type=Application
|
||||||
_Name=GNOME Shell (wayland compositor)
|
_Name=GNOME Shell (wayland compositor)
|
||||||
_Comment=Window management and application launching
|
_Comment=Window management and application launching
|
||||||
Exec=@bindir@/mutter-launch -- gnome-shell --wayland --display-server
|
Exec=@bindir@/gnome-shell --wayland --display-server
|
||||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||||
X-GNOME-Bugzilla-Product=gnome-shell
|
X-GNOME-Bugzilla-Product=gnome-shell
|
||||||
X-GNOME-Bugzilla-Component=general
|
X-GNOME-Bugzilla-Component=general
|
||||||
|
9
data/org.gnome.Shell.PortalHelper.desktop.in
Normal file
9
data/org.gnome.Shell.PortalHelper.desktop.in
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
_Name=Captive Portal
|
||||||
|
Type=Application
|
||||||
|
Exec=gapplication launch org.gnome.Shell.PortalHelper
|
||||||
|
DBusActivatable=true
|
||||||
|
NoDisplay=true
|
||||||
|
Icon=network-workgroup
|
||||||
|
StartupNotify=true
|
||||||
|
OnlyShowIn=GNOME;
|
3
data/org.gnome.Shell.PortalHelper.service.in
Normal file
3
data/org.gnome.Shell.PortalHelper.service.in
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[D-BUS Service]
|
||||||
|
Name=org.gnome.Shell.PortalHelper
|
||||||
|
Exec=@libexecdir@/gnome-shell-portal-helper
|
@ -38,7 +38,6 @@
|
|||||||
<method name="Screencast">
|
<method name="Screencast">
|
||||||
<arg type="s" direction="in" name="file_template"/>
|
<arg type="s" direction="in" name="file_template"/>
|
||||||
<arg type="a{sv}" direction="in" name="options"/>
|
<arg type="a{sv}" direction="in" name="options"/>
|
||||||
<arg type="b" direction="in" name="flash"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
<arg type="b" direction="out" name="success"/>
|
||||||
<arg type="s" direction="out" name="filename_used"/>
|
<arg type="s" direction="out" name="filename_used"/>
|
||||||
</method>
|
</method>
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="favorite-apps" type="as">
|
<key name="favorite-apps" type="as">
|
||||||
<default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
|
<default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Documents.desktop' ]</default>
|
||||||
<_summary>List of desktop file IDs for favorite applications</_summary>
|
<_summary>List of desktop file IDs for favorite applications</_summary>
|
||||||
<_description>
|
<_description>
|
||||||
The applications corresponding to these identifiers
|
The applications corresponding to these identifiers
|
||||||
@ -40,10 +40,10 @@
|
|||||||
</key>
|
</key>
|
||||||
<key name="app-picker-view" type="u">
|
<key name="app-picker-view" type="u">
|
||||||
<default>0</default>
|
<default>0</default>
|
||||||
<summary>App Picker View</summary>
|
<_summary>App Picker View</_summary>
|
||||||
<description>
|
<_description>
|
||||||
Index of the currently selected view in the application picker.
|
Index of the currently selected view in the application picker.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="command-history" type="as">
|
<key name="command-history" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
@ -128,8 +128,8 @@
|
|||||||
</key>
|
</key>
|
||||||
<key name="pause-resume-tweens" type="as">
|
<key name="pause-resume-tweens" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
<summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</summary>
|
<_summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</_summary>
|
||||||
<description></description>
|
<_description></_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
@ -175,11 +175,11 @@
|
|||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key type="b" name="current-workspace-only">
|
<key type="b" name="current-workspace-only">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<summary>Limit switcher to current workspace.</summary>
|
<_summary>Limit switcher to current workspace.</_summary>
|
||||||
<description>
|
<_description>
|
||||||
If true, only applications that have windows on the current workspace are shown in the switcher.
|
If true, only applications that have windows on the current workspace are shown in the switcher.
|
||||||
Otherwise, all applications are included.
|
Otherwise, all applications are included.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
@ -202,11 +202,11 @@
|
|||||||
</key>
|
</key>
|
||||||
<key type="b" name="current-workspace-only">
|
<key type="b" name="current-workspace-only">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Limit switcher to current workspace.</summary>
|
<_summary>Limit switcher to current workspace.</_summary>
|
||||||
<description>
|
<_description>
|
||||||
If true, only windows from the current workspace are shown in the switcher.
|
If true, only windows from the current workspace are shown in the switcher.
|
||||||
Otherwise, all windows are included.
|
Otherwise, all windows are included.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
@ -221,15 +221,6 @@
|
|||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="button-layout" type="s">
|
|
||||||
<default>":close"</default>
|
|
||||||
<_summary>Arrangement of buttons on the titlebar</_summary>
|
|
||||||
<_description>
|
|
||||||
This key overrides the key in org.gnome.desktop.wm.preferences when
|
|
||||||
running GNOME Shell.
|
|
||||||
</_description>
|
|
||||||
</key>
|
|
||||||
|
|
||||||
<key name="edge-tiling" type="b">
|
<key name="edge-tiling" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<_summary>Enable edge tiling when dropping windows on screen edges</_summary>
|
<_summary>Enable edge tiling when dropping windows on screen edges</_summary>
|
||||||
|
@ -45,7 +45,7 @@ stage {
|
|||||||
/* small bold */
|
/* small bold */
|
||||||
.dash-label,
|
.dash-label,
|
||||||
.window-caption,
|
.window-caption,
|
||||||
.switcher-list,
|
.switcher-list,
|
||||||
.app-well-app > .overview-icon,
|
.app-well-app > .overview-icon,
|
||||||
.show-apps > .overview-icon,
|
.show-apps > .overview-icon,
|
||||||
.grid-search-result .overview-icon {
|
.grid-search-result .overview-icon {
|
||||||
@ -153,6 +153,21 @@ StScrollBar StButton#vhandle:active {
|
|||||||
-arrow-rise: 11px;
|
-arrow-rise: 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popup-menu-boxpointer.fallback-app-menu {
|
||||||
|
-arrow-border-radius: 4px;
|
||||||
|
-arrow-background-color: #ededed;
|
||||||
|
-arrow-border-width: 1px;
|
||||||
|
-arrow-border-color: #a6a6a6;
|
||||||
|
-arrow-base: 24px;
|
||||||
|
-arrow-rise: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-menu-boxpointer.fallback-app-menu.dark {
|
||||||
|
-arrow-background-color: #3f4747;
|
||||||
|
-arrow-border-color: #282b2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.popup-menu {
|
.popup-menu {
|
||||||
min-width: 200px;
|
min-width: 200px;
|
||||||
}
|
}
|
||||||
@ -166,6 +181,15 @@ StScrollBar StButton#vhandle:active {
|
|||||||
background-color: #333333;
|
background-color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu .popup-submenu-menu-item:open {
|
||||||
|
background-color: #888888;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu.dark .popup-submenu-menu-item:open {
|
||||||
|
background-color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
.popup-sub-menu {
|
.popup-sub-menu {
|
||||||
background-gradient-start: rgba(80,80,80,0.3);
|
background-gradient-start: rgba(80,80,80,0.3);
|
||||||
background-gradient-end: rgba(80,80,80,0.4);
|
background-gradient-end: rgba(80,80,80,0.4);
|
||||||
@ -173,6 +197,20 @@ StScrollBar StButton#vhandle:active {
|
|||||||
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
|
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu .popup-sub-menu {
|
||||||
|
background-gradient-start: #dddddd;
|
||||||
|
background-gradient-end: #dfdfdf;
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu.dark .popup-sub-menu {
|
||||||
|
background-gradient-start: #474747;
|
||||||
|
background-gradient-end: #4b4b4b;
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
|
||||||
|
}
|
||||||
|
|
||||||
.popup-sub-menu:scrolled .popup-menu-item:ltr {
|
.popup-sub-menu:scrolled .popup-menu-item:ltr {
|
||||||
padding-right: 0em;
|
padding-right: 0em;
|
||||||
}
|
}
|
||||||
@ -221,6 +259,31 @@ StScrollBar StButton#vhandle:active {
|
|||||||
color: #9f9f9f;
|
color: #9f9f9f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu .popup-menu-item {
|
||||||
|
color: #43484a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu .popup-menu-item:active {
|
||||||
|
color: white;
|
||||||
|
background-color: #4689cd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu .popup-menu-item:insensitive {
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu.dark .popup-menu-item {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu.dark .popup-menu-item:active {
|
||||||
|
background-color: #445f7d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu.dark .popup-menu-item:insensitive {
|
||||||
|
color: #9f9f9f;
|
||||||
|
}
|
||||||
|
|
||||||
.popup-separator-menu-item {
|
.popup-separator-menu-item {
|
||||||
-gradient-height: 1px;
|
-gradient-height: 1px;
|
||||||
-gradient-start: rgba(255,255,255,0.0);
|
-gradient-start: rgba(255,255,255,0.0);
|
||||||
@ -230,6 +293,17 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding: 8px 0px;
|
padding: 8px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu .popup-separator-menu-item {
|
||||||
|
-gradient-start: #a0a2a3;
|
||||||
|
-gradient-end: #a0a2a3;
|
||||||
|
-margin-horizontal: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-app-menu.dark .popup-separator-menu-item {
|
||||||
|
-gradient-start: #818584;
|
||||||
|
-gradient-end: #818584;
|
||||||
|
}
|
||||||
|
|
||||||
.popup-status-menu-item {
|
.popup-status-menu-item {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #999;
|
color: #999;
|
||||||
@ -329,6 +403,14 @@ StScrollBar StButton#vhandle:active {
|
|||||||
icon-size: 16px;
|
icon-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.no-networks-label {
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-networks-box {
|
||||||
|
spacing: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Buttons */
|
/* Buttons */
|
||||||
|
|
||||||
.candidate-page-button,
|
.candidate-page-button,
|
||||||
@ -1226,8 +1308,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
.calendar {
|
.calendar {
|
||||||
padding: .4em 1.75em .8em 1.75em;
|
padding: .4em 1.75em .8em 1.75em;
|
||||||
spacing-rows: 0px;
|
|
||||||
spacing-columns: 0px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-month-label {
|
.calendar-month-label {
|
||||||
@ -1423,11 +1503,8 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-right: 8pt;
|
padding-right: 8pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
.url-highlighter {
|
|
||||||
link-color: #ccccff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Message Tray */
|
/* Message Tray */
|
||||||
|
|
||||||
#message-tray {
|
#message-tray {
|
||||||
background: #2e3436 url(message-tray-background.png);
|
background: #2e3436 url(message-tray-background.png);
|
||||||
background-repeat: repeat;
|
background-repeat: repeat;
|
||||||
@ -1450,13 +1527,12 @@ StScrollBar StButton#vhandle:active {
|
|||||||
color: #eeeeee;
|
color: #eeeeee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-messages-label,
|
.url-highlighter {
|
||||||
.no-networks-label {
|
link-color: #ccccff;
|
||||||
color: #999999;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-networks-box {
|
.no-messages-label {
|
||||||
spacing: 12px;
|
color: #999999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification {
|
.notification {
|
||||||
|
@ -1,90 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
id="svg3863"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:docname="menu-arrow.svg">
|
|
||||||
<defs
|
|
||||||
id="defs3865" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="15.836083"
|
|
||||||
inkscape:cx="-3.1641676"
|
|
||||||
inkscape:cy="11.823817"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:window-width="1366"
|
|
||||||
inkscape:window-height="702"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:snap-bbox="true">
|
|
||||||
<sodipodi:guide
|
|
||||||
orientation="1,0"
|
|
||||||
position="15.996443,16.922964"
|
|
||||||
id="guide3873" />
|
|
||||||
<sodipodi:guide
|
|
||||||
orientation="0,1"
|
|
||||||
position="28.041217,3.1256134"
|
|
||||||
id="guide3875" />
|
|
||||||
<sodipodi:guide
|
|
||||||
orientation="0,1"
|
|
||||||
position="-0.80372916,24.469088"
|
|
||||||
id="guide3877" />
|
|
||||||
<sodipodi:guide
|
|
||||||
orientation="1,0"
|
|
||||||
position="3.0363102,34.649657"
|
|
||||||
id="guide3879" />
|
|
||||||
<sodipodi:guide
|
|
||||||
orientation="1,0"
|
|
||||||
position="29.023553,28.577037"
|
|
||||||
id="guide3881" />
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid2988" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata3868">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
transform="translate(0,-16)">
|
|
||||||
<path
|
|
||||||
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
|
||||||
d="m 4,23 8,0 -4,5 z"
|
|
||||||
id="path3883"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="cccc" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.5 KiB |
@ -66,6 +66,7 @@ IGNORE_HFILES= \
|
|||||||
gactionmuxer.h \
|
gactionmuxer.h \
|
||||||
gactionobservable.h \
|
gactionobservable.h \
|
||||||
gactionobserver.h \
|
gactionobserver.h \
|
||||||
|
shell-network-agent.h \
|
||||||
shell-recorder-src.h
|
shell-recorder-src.h
|
||||||
|
|
||||||
if !BUILD_RECORDER
|
if !BUILD_RECORDER
|
||||||
|
@ -50,7 +50,6 @@
|
|||||||
<xi:include href="xml/shell-wm.xml"/>
|
<xi:include href="xml/shell-wm.xml"/>
|
||||||
<xi:include href="xml/shell-util.xml"/>
|
<xi:include href="xml/shell-util.xml"/>
|
||||||
<xi:include href="xml/shell-mount-operation.xml"/>
|
<xi:include href="xml/shell-mount-operation.xml"/>
|
||||||
<xi:include href="xml/shell-network-agent.xml"/>
|
|
||||||
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
||||||
<xi:include href="xml/shell-tp-client.xml"/>
|
<xi:include href="xml/shell-tp-client.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -23,6 +23,11 @@ const GnomeShellIface = '<node> \
|
|||||||
</interface> \
|
</interface> \
|
||||||
</node>';
|
</node>';
|
||||||
|
|
||||||
|
const customCss = '.prefs-button { \
|
||||||
|
padding: 8px; \
|
||||||
|
border-radius: 20px; \
|
||||||
|
}';
|
||||||
|
|
||||||
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
|
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
|
||||||
|
|
||||||
function stripPrefix(string, prefix) {
|
function stripPrefix(string, prefix) {
|
||||||
@ -46,13 +51,9 @@ const Application = new Lang.Class({
|
|||||||
|
|
||||||
this._extensionPrefsModules = {};
|
this._extensionPrefsModules = {};
|
||||||
|
|
||||||
this._extensionIters = {};
|
|
||||||
this._startupUuid = null;
|
this._startupUuid = null;
|
||||||
},
|
this._loaded = false;
|
||||||
|
this._skipMainWindow = false;
|
||||||
_buildModel: function() {
|
|
||||||
this._model = new Gtk.ListStore();
|
|
||||||
this._model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_extensionAvailable: function(uuid) {
|
_extensionAvailable: function(uuid) {
|
||||||
@ -70,11 +71,6 @@ const Application = new Lang.Class({
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_setExtensionInsensitive: function(layout, cell, model, iter, data) {
|
|
||||||
let uuid = model.get_value(iter, 0);
|
|
||||||
cell.set_sensitive(this._extensionAvailable(uuid));
|
|
||||||
},
|
|
||||||
|
|
||||||
_getExtensionPrefsModule: function(extension) {
|
_getExtensionPrefsModule: function(extension) {
|
||||||
let uuid = extension.metadata.uuid;
|
let uuid = extension.metadata.uuid;
|
||||||
|
|
||||||
@ -104,21 +100,23 @@ const Application = new Lang.Class({
|
|||||||
widget = this._buildErrorUI(extension, e);
|
widget = this._buildErrorUI(extension, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destroy the current prefs widget, if it exists
|
let dialog = new Gtk.Dialog({ use_header_bar: true,
|
||||||
if (this._extensionPrefsBin.get_child())
|
modal: true,
|
||||||
this._extensionPrefsBin.get_child().destroy();
|
title: extension.metadata.name });
|
||||||
|
|
||||||
this._extensionPrefsBin.add(widget);
|
if (this._skipMainWindow) {
|
||||||
this._extensionSelector.set_active_iter(this._extensionIters[uuid]);
|
this.application.add_window(dialog);
|
||||||
},
|
if (this._window)
|
||||||
|
this._window.destroy();
|
||||||
|
this._window = dialog;
|
||||||
|
this._window.window_position = Gtk.WindowPosition.CENTER;
|
||||||
|
} else {
|
||||||
|
dialog.transient_for = this._window;
|
||||||
|
}
|
||||||
|
|
||||||
_extensionSelected: function() {
|
dialog.set_default_size(600, 400);
|
||||||
let [success, iter] = this._extensionSelector.get_active_iter();
|
dialog.get_content_area().add(widget);
|
||||||
if (!success)
|
dialog.show();
|
||||||
return;
|
|
||||||
|
|
||||||
let uuid = this._model.get_value(iter, 0);
|
|
||||||
this._selectExtension(uuid);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_buildErrorUI: function(extension, exc) {
|
_buildErrorUI: function(extension, exc) {
|
||||||
@ -151,48 +149,26 @@ const Application = new Lang.Class({
|
|||||||
|
|
||||||
_buildUI: function(app) {
|
_buildUI: function(app) {
|
||||||
this._window = new Gtk.ApplicationWindow({ application: app,
|
this._window = new Gtk.ApplicationWindow({ application: app,
|
||||||
window_position: Gtk.WindowPosition.CENTER,
|
window_position: Gtk.WindowPosition.CENTER });
|
||||||
title: _("GNOME Shell Extension Preferences") });
|
|
||||||
|
|
||||||
this._window.set_size_request(600, 400);
|
this._window.set_size_request(800, 500);
|
||||||
|
|
||||||
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
|
this._titlebar = new Gtk.HeaderBar({ show_close_button: true,
|
||||||
this._window.add(vbox);
|
title: _("GNOME Shell Extensions") });
|
||||||
|
this._window.set_titlebar(this._titlebar);
|
||||||
|
|
||||||
let toolbar = new Gtk.Toolbar();
|
let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||||
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);
|
shadow_type: Gtk.ShadowType.IN,
|
||||||
vbox.add(toolbar);
|
halign: Gtk.Align.CENTER,
|
||||||
let toolitem;
|
margin: 18 });
|
||||||
|
this._window.add(scroll);
|
||||||
|
|
||||||
let label = new Gtk.Label({ label: '<b>' + _("Extension") + '</b>',
|
this._extensionSelector = new Gtk.ListBox({ selection_mode: Gtk.SelectionMode.NONE });
|
||||||
use_markup: true });
|
this._extensionSelector.set_sort_func(Lang.bind(this, this._sortList));
|
||||||
toolitem = new Gtk.ToolItem({ child: label });
|
this._extensionSelector.set_header_func(Lang.bind(this, this._updateHeader));
|
||||||
toolbar.add(toolitem);
|
|
||||||
|
|
||||||
this._extensionSelector = new Gtk.ComboBox({ model: this._model,
|
scroll.add(this._extensionSelector);
|
||||||
margin_left: 8,
|
|
||||||
hexpand: true });
|
|
||||||
this._extensionSelector.get_style_context().add_class(Gtk.STYLE_CLASS_RAISED);
|
|
||||||
|
|
||||||
let renderer = new Gtk.CellRendererText();
|
|
||||||
this._extensionSelector.pack_start(renderer, true);
|
|
||||||
this._extensionSelector.add_attribute(renderer, 'text', 1);
|
|
||||||
this._extensionSelector.set_cell_data_func(renderer, Lang.bind(this, this._setExtensionInsensitive));
|
|
||||||
this._extensionSelector.connect('changed', Lang.bind(this, this._extensionSelected));
|
|
||||||
|
|
||||||
toolitem = new Gtk.ToolItem({ child: this._extensionSelector });
|
|
||||||
toolitem.set_expand(true);
|
|
||||||
toolbar.add(toolitem);
|
|
||||||
|
|
||||||
this._extensionPrefsBin = new Gtk.Frame();
|
|
||||||
vbox.add(this._extensionPrefsBin);
|
|
||||||
|
|
||||||
let label = new Gtk.Label({
|
|
||||||
label: _("Select an extension to configure using the combobox above."),
|
|
||||||
vexpand: true
|
|
||||||
});
|
|
||||||
|
|
||||||
this._extensionPrefsBin.add(label);
|
|
||||||
|
|
||||||
this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell');
|
this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell');
|
||||||
this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) {
|
this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) {
|
||||||
@ -203,6 +179,35 @@ const Application = new Lang.Class({
|
|||||||
this._window.show_all();
|
this._window.show_all();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_addCustomStyle: function() {
|
||||||
|
let provider = new Gtk.CssProvider();
|
||||||
|
|
||||||
|
try {
|
||||||
|
provider.load_from_data(customCss, -1);
|
||||||
|
} catch(e) {
|
||||||
|
log('Failed to add application style');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let screen = this._window.window.get_screen();
|
||||||
|
let priority = Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION;
|
||||||
|
Gtk.StyleContext.add_provider_for_screen(screen, provider, priority);
|
||||||
|
},
|
||||||
|
|
||||||
|
_sortList: function(row1, row2) {
|
||||||
|
let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name;
|
||||||
|
let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name;
|
||||||
|
return name1.localeCompare(name2);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateHeader: function(row, before) {
|
||||||
|
if (!before || row.get_header())
|
||||||
|
return;
|
||||||
|
|
||||||
|
let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL });
|
||||||
|
row.set_header(sep);
|
||||||
|
},
|
||||||
|
|
||||||
_scanExtensions: function() {
|
_scanExtensions: function() {
|
||||||
let finder = new ExtensionUtils.ExtensionFinder();
|
let finder = new ExtensionUtils.ExtensionFinder();
|
||||||
finder.connect('extension-found', Lang.bind(this, this._extensionFound));
|
finder.connect('extension-found', Lang.bind(this, this._extensionFound));
|
||||||
@ -211,15 +216,24 @@ const Application = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_extensionFound: function(finder, extension) {
|
_extensionFound: function(finder, extension) {
|
||||||
let iter = this._model.append();
|
let row = new ExtensionRow(extension.uuid);
|
||||||
this._model.set(iter, [0, 1], [extension.uuid, extension.metadata.name]);
|
|
||||||
this._extensionIters[extension.uuid] = iter;
|
row.prefsButton.visible = this._extensionAvailable(row.uuid);
|
||||||
|
row.prefsButton.connect('clicked', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._selectExtension(row.uuid);
|
||||||
|
}));
|
||||||
|
|
||||||
|
row.show_all();
|
||||||
|
this._extensionSelector.add(row);
|
||||||
},
|
},
|
||||||
|
|
||||||
_extensionsLoaded: function() {
|
_extensionsLoaded: function() {
|
||||||
if (this._startupUuid && this._extensionAvailable(this._startupUuid))
|
if (this._startupUuid && this._extensionAvailable(this._startupUuid))
|
||||||
this._selectExtension(this._startupUuid);
|
this._selectExtension(this._startupUuid);
|
||||||
this._startupUuid = null;
|
this._startupUuid = null;
|
||||||
|
this._skipMainWindow = false;
|
||||||
|
this._loaded = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onActivate: function() {
|
_onActivate: function() {
|
||||||
@ -227,29 +241,125 @@ const Application = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onStartup: function(app) {
|
_onStartup: function(app) {
|
||||||
this._buildModel();
|
|
||||||
this._buildUI(app);
|
this._buildUI(app);
|
||||||
|
this._addCustomStyle();
|
||||||
this._scanExtensions();
|
this._scanExtensions();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onCommandLine: function(app, commandLine) {
|
_onCommandLine: function(app, commandLine) {
|
||||||
app.activate();
|
app.activate();
|
||||||
let args = commandLine.get_arguments();
|
let args = commandLine.get_arguments();
|
||||||
|
|
||||||
if (args.length) {
|
if (args.length) {
|
||||||
let uuid = args[0];
|
let uuid = args[0];
|
||||||
|
|
||||||
|
this._skipMainWindow = true;
|
||||||
|
|
||||||
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
||||||
uuid = stripPrefix(uuid, "extension:///");
|
uuid = stripPrefix(uuid, "extension:///");
|
||||||
|
|
||||||
if (this._extensionAvailable(uuid))
|
if (this._extensionAvailable(uuid))
|
||||||
this._selectExtension(uuid);
|
this._selectExtension(uuid);
|
||||||
else
|
else if (!this._loaded)
|
||||||
this._startupUuid = uuid;
|
this._startupUuid = uuid;
|
||||||
|
else
|
||||||
|
this._skipMainWindow = false;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const ExtensionRow = new Lang.Class({
|
||||||
|
Name: 'ExtensionRow',
|
||||||
|
Extends: Gtk.ListBoxRow,
|
||||||
|
|
||||||
|
_init: function(uuid) {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this.uuid = uuid;
|
||||||
|
|
||||||
|
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
|
||||||
|
this._settings.connect('changed::enabled-extensions', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._switch.state = this._isEnabled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._buildUI();
|
||||||
|
},
|
||||||
|
|
||||||
|
_buildUI: function() {
|
||||||
|
let extension = ExtensionUtils.extensions[this.uuid];
|
||||||
|
|
||||||
|
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL,
|
||||||
|
hexpand: true, margin: 12, spacing: 6 });
|
||||||
|
this.add(hbox);
|
||||||
|
|
||||||
|
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL,
|
||||||
|
spacing: 6, hexpand: true });
|
||||||
|
hbox.add(vbox);
|
||||||
|
|
||||||
|
let name = GLib.markup_escape_text(extension.metadata.name, -1);
|
||||||
|
let label = new Gtk.Label({ label: '<b>' + name + '</b>',
|
||||||
|
use_markup: true,
|
||||||
|
halign: Gtk.Align.START });
|
||||||
|
vbox.add(label);
|
||||||
|
|
||||||
|
let desc = extension.metadata.description.split('\n')[0];
|
||||||
|
label = new Gtk.Label({ label: desc,
|
||||||
|
ellipsize: Pango.EllipsizeMode.END,
|
||||||
|
halign: Gtk.Align.START });
|
||||||
|
vbox.add(label);
|
||||||
|
|
||||||
|
let button = new Gtk.Button({ valign: Gtk.Align.CENTER,
|
||||||
|
no_show_all: true });
|
||||||
|
button.add(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
||||||
|
icon_size: Gtk.IconSize.BUTTON,
|
||||||
|
visible: true }));
|
||||||
|
button.get_style_context().add_class('prefs-button');
|
||||||
|
hbox.add(button);
|
||||||
|
|
||||||
|
this.prefsButton = button;
|
||||||
|
|
||||||
|
this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER,
|
||||||
|
state: this._isEnabled() });
|
||||||
|
this._switch.connect('notify::active', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
if (this._switch.active)
|
||||||
|
this._enable();
|
||||||
|
else
|
||||||
|
this._disable();
|
||||||
|
}));
|
||||||
|
this._switch.connect('state-set', function() { return true; });
|
||||||
|
hbox.add(this._switch);
|
||||||
|
},
|
||||||
|
|
||||||
|
_isEnabled: function() {
|
||||||
|
let extensions = this._settings.get_strv('enabled-extensions');
|
||||||
|
return extensions.indexOf(this.uuid) != -1;
|
||||||
|
},
|
||||||
|
|
||||||
|
_enable: function() {
|
||||||
|
let extensions = this._settings.get_strv('enabled-extensions');
|
||||||
|
if (extensions.indexOf(this.uuid) != -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
extensions.push(this.uuid);
|
||||||
|
this._settings.set_strv('enabled-extensions', extensions);
|
||||||
|
},
|
||||||
|
|
||||||
|
_disable: function() {
|
||||||
|
let extensions = this._settings.get_strv('enabled-extensions');
|
||||||
|
let pos = extensions.indexOf(this.uuid);
|
||||||
|
if (pos == -1)
|
||||||
|
return;
|
||||||
|
do {
|
||||||
|
extensions.splice(pos, 1);
|
||||||
|
pos = extensions.indexOf(this.uuid);
|
||||||
|
} while (pos != -1);
|
||||||
|
this._settings.set_strv('enabled-extensions', extensions);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function initEnvironment() {
|
function initEnvironment() {
|
||||||
// Monkey-patch in a "global" object that fakes some Shell utilities
|
// Monkey-patch in a "global" object that fakes some Shell utilities
|
||||||
// that ExtensionUtils depends on.
|
// that ExtensionUtils depends on.
|
||||||
|
@ -48,8 +48,6 @@ const _SCROLL_ANIMATION_TIME = 0.5;
|
|||||||
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
||||||
const _LOGO_ICON_HEIGHT = 48;
|
const _LOGO_ICON_HEIGHT = 48;
|
||||||
|
|
||||||
let _loginDialog = null;
|
|
||||||
|
|
||||||
const UserListItem = new Lang.Class({
|
const UserListItem = new Lang.Class({
|
||||||
Name: 'UserListItem',
|
Name: 'UserListItem',
|
||||||
|
|
||||||
@ -384,7 +382,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
Lang.bind(this, this._onTimedLoginRequested));
|
Lang.bind(this, this._onTimedLoginRequested));
|
||||||
}
|
}
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA });
|
||||||
|
|
||||||
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
|
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
|
||||||
Lang.bind(this, this._updateBanner));
|
Lang.bind(this, this._updateBanner));
|
||||||
|
@ -128,7 +128,7 @@ const ShellUserVerifier = new Lang.Class({
|
|||||||
|
|
||||||
this._client = client;
|
this._client = client;
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: LOGIN_SCREEN_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
||||||
this._settings.connect('changed',
|
this._settings.connect('changed',
|
||||||
Lang.bind(this, this._updateDefaultService));
|
Lang.bind(this, this._updateDefaultService));
|
||||||
this._updateDefaultService();
|
this._updateDefaultService();
|
||||||
|
@ -26,10 +26,13 @@
|
|||||||
|
|
||||||
<file>perf/core.js</file>
|
<file>perf/core.js</file>
|
||||||
|
|
||||||
|
<file>portalHelper/main.js</file>
|
||||||
|
|
||||||
<file>ui/altTab.js</file>
|
<file>ui/altTab.js</file>
|
||||||
<file>ui/animation.js</file>
|
<file>ui/animation.js</file>
|
||||||
<file>ui/appDisplay.js</file>
|
<file>ui/appDisplay.js</file>
|
||||||
<file>ui/appFavorites.js</file>
|
<file>ui/appFavorites.js</file>
|
||||||
|
<file>ui/appSwitchAction.js</file>
|
||||||
<file>ui/backgroundMenu.js</file>
|
<file>ui/backgroundMenu.js</file>
|
||||||
<file>ui/background.js</file>
|
<file>ui/background.js</file>
|
||||||
<file>ui/boxpointer.js</file>
|
<file>ui/boxpointer.js</file>
|
||||||
@ -39,6 +42,7 @@
|
|||||||
<file>ui/dash.js</file>
|
<file>ui/dash.js</file>
|
||||||
<file>ui/dateMenu.js</file>
|
<file>ui/dateMenu.js</file>
|
||||||
<file>ui/dnd.js</file>
|
<file>ui/dnd.js</file>
|
||||||
|
<file>ui/edgeDragAction.js</file>
|
||||||
<file>ui/endSessionDialog.js</file>
|
<file>ui/endSessionDialog.js</file>
|
||||||
<file>ui/environment.js</file>
|
<file>ui/environment.js</file>
|
||||||
<file>ui/extensionDownloader.js</file>
|
<file>ui/extensionDownloader.js</file>
|
||||||
@ -77,6 +81,7 @@
|
|||||||
<file>ui/shellDBus.js</file>
|
<file>ui/shellDBus.js</file>
|
||||||
<file>ui/shellEntry.js</file>
|
<file>ui/shellEntry.js</file>
|
||||||
<file>ui/shellMountOperation.js</file>
|
<file>ui/shellMountOperation.js</file>
|
||||||
|
<file>ui/showOverviewAction.js</file>
|
||||||
<file>ui/slider.js</file>
|
<file>ui/slider.js</file>
|
||||||
<file>ui/switcherPopup.js</file>
|
<file>ui/switcherPopup.js</file>
|
||||||
<file>ui/tweener.js</file>
|
<file>ui/tweener.js</file>
|
||||||
@ -84,8 +89,10 @@
|
|||||||
<file>ui/userWidget.js</file>
|
<file>ui/userWidget.js</file>
|
||||||
<file>ui/viewSelector.js</file>
|
<file>ui/viewSelector.js</file>
|
||||||
<file>ui/windowAttentionHandler.js</file>
|
<file>ui/windowAttentionHandler.js</file>
|
||||||
|
<file>ui/windowMenu.js</file>
|
||||||
<file>ui/windowManager.js</file>
|
<file>ui/windowManager.js</file>
|
||||||
<file>ui/workspace.js</file>
|
<file>ui/workspace.js</file>
|
||||||
|
<file>ui/workspaceSwitchAction.js</file>
|
||||||
<file>ui/workspaceSwitcherPopup.js</file>
|
<file>ui/workspaceSwitcherPopup.js</file>
|
||||||
<file>ui/workspaceThumbnail.js</file>
|
<file>ui/workspaceThumbnail.js</file>
|
||||||
<file>ui/workspacesView.js</file>
|
<file>ui/workspacesView.js</file>
|
||||||
|
248
js/portalHelper/main.js
Normal file
248
js/portalHelper/main.js
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
const Format = imports.format;
|
||||||
|
const Gettext = imports.gettext;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
const Soup = imports.gi.Soup;
|
||||||
|
const WebKit = imports.gi.WebKit2;
|
||||||
|
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const Config = imports.misc.config;
|
||||||
|
|
||||||
|
const PortalHelperResult = {
|
||||||
|
CANCELLED: 0,
|
||||||
|
COMPLETED: 1,
|
||||||
|
RECHECK: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
const INACTIVITY_TIMEOUT = 30000; //ms
|
||||||
|
const CONNECTIVITY_RECHECK_RATELIMIT_TIMEOUT = 30 * GLib.USEC_PER_SEC;
|
||||||
|
|
||||||
|
const HelperDBusInterface = '<node> \
|
||||||
|
<interface name="org.gnome.Shell.PortalHelper"> \
|
||||||
|
<method name="Authenticate"> \
|
||||||
|
<arg type="o" direction="in" name="connection" /> \
|
||||||
|
<arg type="s" direction="in" name="url" /> \
|
||||||
|
<arg type="u" direction="in" name="timestamp" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="Close"> \
|
||||||
|
<arg type="o" direction="in" name="connection" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="Refresh"> \
|
||||||
|
<arg type="o" direction="in" name="connection" /> \
|
||||||
|
</method> \
|
||||||
|
<signal name="Done"> \
|
||||||
|
<arg type="o" name="connection" /> \
|
||||||
|
<arg type="u" name="result" /> \
|
||||||
|
</signal> \
|
||||||
|
</interface> \
|
||||||
|
</node>';
|
||||||
|
|
||||||
|
const PortalWindow = new Lang.Class({
|
||||||
|
Name: 'PortalWindow',
|
||||||
|
Extends: Gtk.ApplicationWindow,
|
||||||
|
|
||||||
|
_init: function(application, url, timestamp, doneCallback) {
|
||||||
|
this.parent({ application: application });
|
||||||
|
|
||||||
|
if (url) {
|
||||||
|
this._uri = new Soup.URI(uri);
|
||||||
|
} else {
|
||||||
|
url = 'http://www.gnome.org';
|
||||||
|
this._uri = null;
|
||||||
|
this._everSeenRedirect = false;
|
||||||
|
}
|
||||||
|
this._originalUrl = url;
|
||||||
|
this._doneCallback = doneCallback;
|
||||||
|
this._lastRecheck = 0;
|
||||||
|
this._recheckAtExit = false;
|
||||||
|
|
||||||
|
this._webView = new WebKit.WebView();
|
||||||
|
this._webView.connect('decide-policy', Lang.bind(this, this._onDecidePolicy));
|
||||||
|
this._webView.load_uri(url);
|
||||||
|
this._webView.connect('notify::title', Lang.bind(this, this._syncTitle));
|
||||||
|
this._syncTitle();
|
||||||
|
|
||||||
|
this.add(this._webView);
|
||||||
|
this._webView.show();
|
||||||
|
this.maximize();
|
||||||
|
this.present_with_time(timestamp);
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncTitle: function() {
|
||||||
|
let title = this._webView.title;
|
||||||
|
|
||||||
|
if (title) {
|
||||||
|
this.title = title;
|
||||||
|
} else {
|
||||||
|
// TRANSLATORS: this is the title of the wifi captive portal login
|
||||||
|
// window, until we know the title of the actual login page
|
||||||
|
this.title = _("Web Authentication Redirect");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
refresh: function() {
|
||||||
|
this._everSeenRedirect = false;
|
||||||
|
this._webView.load_uri(this._originalUrl);
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_delete_event: function(event) {
|
||||||
|
if (this._recheckAtExit)
|
||||||
|
this._doneCallback(PortalHelperResult.RECHECK);
|
||||||
|
else
|
||||||
|
this._doneCallback(PortalHelperResult.CANCELLED);
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDecidePolicy: function(view, decision, type) {
|
||||||
|
if (type == WebKit.PolicyDecisionType.NEW_WINDOW_ACTION) {
|
||||||
|
decision.ignore();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != WebKit.PolicyDecisionType.NAVIGATION_ACTION)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let request = decision.get_request();
|
||||||
|
let uri = new Soup.URI(request.get_uri());
|
||||||
|
|
||||||
|
if (this._uri != null) {
|
||||||
|
if (!uri.host_equal(uri, this._uri)) {
|
||||||
|
// We *may* have finished here, but we don't know for
|
||||||
|
// sure. Tell gnome-shell to run another connectivity check
|
||||||
|
// (but ratelimit the checks, we don't want to spam
|
||||||
|
// gnome.org for portals that have 10 or more internal
|
||||||
|
// redirects - and unfortunately they exist)
|
||||||
|
// If we hit the rate limit, we also queue a recheck
|
||||||
|
// when the window is closed, just in case we miss the
|
||||||
|
// final check and don't realize we're connected
|
||||||
|
// This should not be a problem in the cancelled logic,
|
||||||
|
// because if the user doesn't want to start the login,
|
||||||
|
// we should not see any redirect at all, outside this._uri
|
||||||
|
|
||||||
|
let now = GLib.get_monotonic_time();
|
||||||
|
let shouldRecheck = (now - this._lastRecheck) >
|
||||||
|
CONNECTIVITY_RECHECK_RATELIMIT_TIMEOUT;
|
||||||
|
|
||||||
|
if (shouldRecheck) {
|
||||||
|
this._lastRecheck = now;
|
||||||
|
this._recheckAtExit = false;
|
||||||
|
this._doneCallback(PortalHelperResult.RECHECK);
|
||||||
|
} else {
|
||||||
|
this._recheckAtExit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the URI, in case of chained redirects, so we still
|
||||||
|
// think we're doing the login until gnome-shell kills us
|
||||||
|
this._uri = uri;
|
||||||
|
} else {
|
||||||
|
if (uri.get_host() == 'www.gnome.org' && this._everSeenRedirect) {
|
||||||
|
// Yay, we got to gnome!
|
||||||
|
decision.ignore();
|
||||||
|
this._doneCallback(PortalHelperResult.COMPLETED);
|
||||||
|
return true;
|
||||||
|
} else if (uri.get_host() != 'www.gnome.org') {
|
||||||
|
this._everSeenRedirect = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
decision.use();
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const WebPortalHelper = new Lang.Class({
|
||||||
|
Name: 'WebPortalHelper',
|
||||||
|
Extends: Gtk.Application,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent({ application_id: 'org.gnome.Shell.PortalHelper',
|
||||||
|
flags: Gio.ApplicationFlags.IS_SERVICE,
|
||||||
|
inactivity_timeout: 30000 });
|
||||||
|
|
||||||
|
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(HelperDBusInterface, this);
|
||||||
|
this._queue = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_dbus_register: function(connection, path) {
|
||||||
|
this._dbusImpl.export(connection, path);
|
||||||
|
this.parent(connection, path);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_dbus_unregister: function(connection, path) {
|
||||||
|
this._dbusImpl.unexport_from_connection(connection);
|
||||||
|
this.parent(connection, path);
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_activate: function() {
|
||||||
|
// If launched manually (for example for testing), force a dummy authentication
|
||||||
|
// session with the default url
|
||||||
|
this.Authenticate('/org/gnome/dummy', '', 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
Authenticate: function(connection, url, timestamp) {
|
||||||
|
this._queue.push({ connection: connection, url: url, timestamp: timestamp });
|
||||||
|
|
||||||
|
this._processQueue();
|
||||||
|
},
|
||||||
|
|
||||||
|
Close: function(connection) {
|
||||||
|
for (let i = 0; i < this._queue.length; i++) {
|
||||||
|
let obj = this._queue[i];
|
||||||
|
|
||||||
|
if (obj.connection == connection) {
|
||||||
|
if (obj.window)
|
||||||
|
obj.window.destroy();
|
||||||
|
this._queue.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._processQueue();
|
||||||
|
},
|
||||||
|
|
||||||
|
Refresh: function(connection) {
|
||||||
|
for (let i = 0; i < this._queue.length; i++) {
|
||||||
|
let obj = this._queue[i];
|
||||||
|
|
||||||
|
if (obj.connection == connection) {
|
||||||
|
if (obj.window)
|
||||||
|
obj.window.refresh();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_processQueue: function() {
|
||||||
|
if (this._queue.length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let top = this._queue[0];
|
||||||
|
if (top.window != null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
top.window = new PortalWindow(this, top.uri, top.timestamp, Lang.bind(this, function(result) {
|
||||||
|
this._dbusImpl.emit_signal('Done', new GLib.Variant('(ou)', [top.connection, result]));
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function initEnvironment() {
|
||||||
|
String.prototype.format = Format.format;
|
||||||
|
}
|
||||||
|
|
||||||
|
function main(argv) {
|
||||||
|
initEnvironment();
|
||||||
|
|
||||||
|
Gettext.bindtextdomain(Config.GETTEXT_PACKAGE, Config.LOCALEDIR);
|
||||||
|
Gettext.textdomain(Config.GETTEXT_PACKAGE);
|
||||||
|
|
||||||
|
let app = new WebPortalHelper();
|
||||||
|
return app.run(argv);
|
||||||
|
}
|
@ -167,6 +167,8 @@ const AppSwitcherPopup = new Lang.Class({
|
|||||||
this._select(this._selectedIndex, this._nextWindow());
|
this._select(this._selectedIndex, this._nextWindow());
|
||||||
else if (keysym == Clutter.Up)
|
else if (keysym == Clutter.Up)
|
||||||
this._select(this._selectedIndex, null, true);
|
this._select(this._selectedIndex, null, true);
|
||||||
|
else
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
} else {
|
} else {
|
||||||
if (keysym == Clutter.Left)
|
if (keysym == Clutter.Left)
|
||||||
this._select(this._previous());
|
this._select(this._previous());
|
||||||
@ -174,7 +176,11 @@ const AppSwitcherPopup = new Lang.Class({
|
|||||||
this._select(this._next());
|
this._select(this._next());
|
||||||
else if (keysym == Clutter.Down)
|
else if (keysym == Clutter.Down)
|
||||||
this._select(this._selectedIndex, 0);
|
this._select(this._selectedIndex, 0);
|
||||||
|
else
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
|
||||||
_scrollHandler: function(direction) {
|
_scrollHandler: function(direction) {
|
||||||
@ -361,12 +367,12 @@ const WindowSwitcherPopup = new Lang.Class({
|
|||||||
|
|
||||||
_init: function(items) {
|
_init: function(items) {
|
||||||
this.parent(items);
|
this.parent(items);
|
||||||
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
|
||||||
},
|
},
|
||||||
|
|
||||||
_getWindowList: function() {
|
_getWindowList: function() {
|
||||||
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||||
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace);
|
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||||
},
|
},
|
||||||
|
|
||||||
_createSwitcher: function() {
|
_createSwitcher: function() {
|
||||||
@ -404,7 +410,11 @@ const WindowSwitcherPopup = new Lang.Class({
|
|||||||
this._select(this._previous());
|
this._select(this._previous());
|
||||||
else if (keysym == Clutter.Right)
|
else if (keysym == Clutter.Right)
|
||||||
this._select(this._next());
|
this._select(this._next());
|
||||||
|
else
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
|
||||||
_finish: function() {
|
_finish: function() {
|
||||||
@ -446,11 +456,10 @@ const AppSwitcher = new Lang.Class({
|
|||||||
this._arrows = [];
|
this._arrows = [];
|
||||||
|
|
||||||
let windowTracker = Shell.WindowTracker.get_default();
|
let windowTracker = Shell.WindowTracker.get_default();
|
||||||
let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' });
|
let settings = new Gio.Settings({ schema_id: 'org.gnome.shell.app-switcher' });
|
||||||
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
|
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
|
||||||
: null;
|
: null;
|
||||||
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL,
|
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||||
global.screen, workspace);
|
|
||||||
|
|
||||||
// Construct the AppIcons, add to the popup
|
// Construct the AppIcons, add to the popup
|
||||||
for (let i = 0; i < apps.length; i++) {
|
for (let i = 0; i < apps.length; i++) {
|
||||||
|
@ -16,6 +16,7 @@ const Atk = imports.gi.Atk;
|
|||||||
const AppFavorites = imports.ui.appFavorites;
|
const AppFavorites = imports.ui.appFavorites;
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
|
const GrabHelper = imports.ui.grabHelper;
|
||||||
const IconGrid = imports.ui.iconGrid;
|
const IconGrid = imports.ui.iconGrid;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Overview = imports.ui.overview;
|
const Overview = imports.ui.overview;
|
||||||
@ -370,7 +371,7 @@ const AllView = new Lang.Class({
|
|||||||
Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, function() {
|
Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, function() {
|
||||||
Main.queueDeferredWork(this._redisplayWorkId);
|
Main.queueDeferredWork(this._redisplayWorkId);
|
||||||
}));
|
}));
|
||||||
this._folderSettings = new Gio.Settings({ schema: 'org.gnome.desktop.app-folders' });
|
this._folderSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
|
||||||
this._folderSettings.connect('changed::folder-children', Lang.bind(this, function() {
|
this._folderSettings.connect('changed::folder-children', Lang.bind(this, function() {
|
||||||
Main.queueDeferredWork(this._redisplayWorkId);
|
Main.queueDeferredWork(this._redisplayWorkId);
|
||||||
}));
|
}));
|
||||||
@ -740,7 +741,7 @@ const AppDisplay = new Lang.Class({
|
|||||||
Name: 'AppDisplay',
|
Name: 'AppDisplay',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._privacySettings = new Gio.Settings({ schema: 'org.gnome.desktop.privacy' });
|
this._privacySettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.privacy' });
|
||||||
this._privacySettings.connect('changed::remember-app-usage',
|
this._privacySettings.connect('changed::remember-app-usage',
|
||||||
Lang.bind(this, this._updateFrequentVisibility));
|
Lang.bind(this, this._updateFrequentVisibility));
|
||||||
|
|
||||||
@ -952,6 +953,7 @@ const FolderView = new Lang.Class({
|
|||||||
let subSize = Math.floor(FOLDER_SUBICON_FRACTION * size);
|
let subSize = Math.floor(FOLDER_SUBICON_FRACTION * size);
|
||||||
|
|
||||||
let numItems = this._allItems.length;
|
let numItems = this._allItems.length;
|
||||||
|
let rtl = icon.get_text_direction() == Clutter.TextDirection.RTL;
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
let bin;
|
let bin;
|
||||||
if (i < numItems) {
|
if (i < numItems) {
|
||||||
@ -960,7 +962,7 @@ const FolderView = new Lang.Class({
|
|||||||
} else {
|
} else {
|
||||||
bin = new St.Bin({ width: subSize, height: subSize });
|
bin = new St.Bin({ width: subSize, height: subSize });
|
||||||
}
|
}
|
||||||
layout.pack(bin, i % 2, Math.floor(i / 2));
|
layout.pack(bin, rtl ? (i + 1) % 2 : i % 2, Math.floor(i / 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
return icon;
|
return icon;
|
||||||
@ -1249,18 +1251,8 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
function() {
|
function() {
|
||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
}));
|
}));
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
|
||||||
},
|
this._grabHelper.addActor(Main.layoutManager.overviewGroup);
|
||||||
|
|
||||||
_onKeyPress: function(actor, event) {
|
|
||||||
if (!this._isOpen)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
if (event.get_key_symbol() != Clutter.KEY_Escape)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
this.popdown();
|
|
||||||
return Clutter.EVENT_STOP;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
toggle: function() {
|
toggle: function() {
|
||||||
@ -1274,6 +1266,12 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
if (this._isOpen)
|
if (this._isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._isOpen = this._grabHelper.grab({ actor: this.actor,
|
||||||
|
onUngrab: Lang.bind(this, this.popdown) });
|
||||||
|
|
||||||
|
if (!this._isOpen)
|
||||||
|
return;
|
||||||
|
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
this._boxPointer.setArrowActor(this._source.actor);
|
this._boxPointer.setArrowActor(this._source.actor);
|
||||||
@ -1282,7 +1280,6 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
|
|
||||||
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
|
||||||
this._isOpen = true;
|
|
||||||
this.emit('open-state-changed', true);
|
this.emit('open-state-changed', true);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1290,6 +1287,8 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
if (!this._isOpen)
|
if (!this._isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._grabHelper.ungrab({ actor: this.actor });
|
||||||
|
|
||||||
this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
|
this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
|
||||||
BoxPointer.PopupAnimation.SLIDE);
|
BoxPointer.PopupAnimation.SLIDE);
|
||||||
this._isOpen = false;
|
this._isOpen = false;
|
||||||
|
64
js/ui/appSwitchAction.js
Normal file
64
js/ui/appSwitchAction.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
|
||||||
|
//in milliseconds
|
||||||
|
let LONG_PRESS_TIMEOUT = 250;
|
||||||
|
|
||||||
|
let MOTION_THRESHOLD = 30;
|
||||||
|
|
||||||
|
const AppSwitchAction = new Lang.Class({
|
||||||
|
Name: 'AppSwitchAction',
|
||||||
|
Extends: Clutter.GestureAction,
|
||||||
|
|
||||||
|
_init : function() {
|
||||||
|
this.parent();
|
||||||
|
this.set_n_touch_points (3);
|
||||||
|
global.display.connect('grab-op-begin', Lang.bind(this, this.cancel));
|
||||||
|
global.display.connect('grab-op-end', Lang.bind(this, this.cancel));
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
|
return this.get_n_current_points() <= 4;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_begin : function(action, actor) {
|
||||||
|
let nPoints = this.get_n_current_points();
|
||||||
|
let event = this.get_last_event (nPoints - 1);
|
||||||
|
|
||||||
|
if (nPoints == 3)
|
||||||
|
this._longPressStartTime = event.get_time();
|
||||||
|
else if (nPoints == 4) {
|
||||||
|
// Check whether the 4th finger press happens after a 3-finger long press,
|
||||||
|
// this only needs to be checked on the first 4th finger press
|
||||||
|
if (this._longPressStartTime != null &&
|
||||||
|
event.get_time() < this._longPressStartTime + LONG_PRESS_TIMEOUT)
|
||||||
|
this.cancel();
|
||||||
|
else {
|
||||||
|
this._longPressStartTime = null;
|
||||||
|
this.emit('activated');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.get_n_current_points() <= 4;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_progress : function(action, actor) {
|
||||||
|
if (this.get_n_current_points() == 3) {
|
||||||
|
for (let i = 0; i < this.get_n_current_points(); i++) {
|
||||||
|
[startX, startY] = this.get_press_coords(i);
|
||||||
|
[x, y] = this.get_motion_coords(i);
|
||||||
|
|
||||||
|
if (Math.abs(x - startX) > MOTION_THRESHOLD ||
|
||||||
|
Math.abs(y - startY) > MOTION_THRESHOLD)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(AppSwitchAction.prototype);
|
@ -448,7 +448,7 @@ const Background = new Lang.Class({
|
|||||||
|
|
||||||
let image = this._images[index];
|
let image = this._images[index];
|
||||||
if (image.content)
|
if (image.content)
|
||||||
this._cache.removeImageContent(content);
|
this._cache.removeImageContent(image.content);
|
||||||
image.content = content;
|
image.content = content;
|
||||||
this._watchCacheFile(filename);
|
this._watchCacheFile(filename);
|
||||||
},
|
},
|
||||||
@ -659,7 +659,10 @@ const SystemBackground = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
this._cache.removeImageContent(this.actor.content);
|
let content = this.actor.content;
|
||||||
|
|
||||||
|
if (content)
|
||||||
|
this._cache.removeImageContent(content);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(SystemBackground.prototype);
|
Signals.addSignalMethods(SystemBackground.prototype);
|
||||||
@ -725,7 +728,7 @@ const BackgroundManager = new Lang.Class({
|
|||||||
controlPosition: true,
|
controlPosition: true,
|
||||||
settingsSchema: BACKGROUND_SCHEMA });
|
settingsSchema: BACKGROUND_SCHEMA });
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: params.settingsSchema });
|
this._settings = new Gio.Settings({ schema_id: params.settingsSchema });
|
||||||
this._container = params.container;
|
this._container = params.container;
|
||||||
this._layoutManager = params.layoutManager;
|
this._layoutManager = params.layoutManager;
|
||||||
this._effects = params.effects;
|
this._effects = params.effects;
|
||||||
|
@ -55,6 +55,10 @@ function addBackgroundMenu(actor, layoutManager) {
|
|||||||
});
|
});
|
||||||
actor.add_action(clickAction);
|
actor.add_action(clickAction);
|
||||||
|
|
||||||
|
global.display.connect('grab-op-begin', function () {
|
||||||
|
clickAction.release();
|
||||||
|
});
|
||||||
|
|
||||||
actor.connect('destroy', function() {
|
actor.connect('destroy', function() {
|
||||||
actor._backgroundMenu.destroy();
|
actor._backgroundMenu.destroy();
|
||||||
actor._backgroundMenu = null;
|
actor._backgroundMenu = null;
|
||||||
|
@ -383,7 +383,7 @@ const Calendar = new Lang.Class({
|
|||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._weekStart = Shell.util_get_week_start();
|
this._weekStart = Shell.util_get_week_start();
|
||||||
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.calendar' });
|
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.calendar' });
|
||||||
|
|
||||||
this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange));
|
this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange));
|
||||||
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
|
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
|
||||||
@ -408,9 +408,9 @@ const Calendar = new Lang.Class({
|
|||||||
|
|
||||||
this._shouldDateGrabFocus = false;
|
this._shouldDateGrabFocus = false;
|
||||||
|
|
||||||
this.actor = new St.Table({ homogeneous: false,
|
this.actor = new St.Widget({ style_class: 'calendar',
|
||||||
style_class: 'calendar',
|
layout_manager: new Clutter.TableLayout(),
|
||||||
reactive: true });
|
reactive: true });
|
||||||
|
|
||||||
this.actor.connect('scroll-event',
|
this.actor.connect('scroll-event',
|
||||||
Lang.bind(this, this._onScroll));
|
Lang.bind(this, this._onScroll));
|
||||||
@ -441,13 +441,14 @@ const Calendar = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_buildHeader: function() {
|
_buildHeader: function() {
|
||||||
|
let layout = this.actor.layout_manager;
|
||||||
let offsetCols = this._useWeekdate ? 1 : 0;
|
let offsetCols = this._useWeekdate ? 1 : 0;
|
||||||
this.actor.destroy_all_children();
|
this.actor.destroy_all_children();
|
||||||
|
|
||||||
// Top line of the calendar '<| September 2009 |>'
|
// Top line of the calendar '<| September 2009 |>'
|
||||||
this._topBox = new St.BoxLayout();
|
this._topBox = new St.BoxLayout();
|
||||||
this.actor.add(this._topBox,
|
layout.pack(this._topBox, 0, 0);
|
||||||
{ row: 0, col: 0, col_span: offsetCols + 7 });
|
layout.set_span(this._topBox, offsetCols + 7, 1);
|
||||||
|
|
||||||
this._backButton = new St.Button({ style_class: 'calendar-change-month-back',
|
this._backButton = new St.Button({ style_class: 'calendar-change-month-back',
|
||||||
accessible_name: _("Previous month"),
|
accessible_name: _("Previous month"),
|
||||||
@ -479,10 +480,12 @@ const Calendar = new Lang.Class({
|
|||||||
let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay());
|
let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay());
|
||||||
let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading',
|
let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading',
|
||||||
text: customDayAbbrev });
|
text: customDayAbbrev });
|
||||||
this.actor.add(label,
|
let col;
|
||||||
{ row: 1,
|
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL)
|
||||||
col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7,
|
col = 6 - (7 + iter.getDay() - this._weekStart) % 7;
|
||||||
x_fill: false, x_align: St.Align.MIDDLE });
|
else
|
||||||
|
col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
|
||||||
|
layout.pack(label, col, 1);
|
||||||
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,6 +604,7 @@ const Calendar = new Lang.Class({
|
|||||||
|
|
||||||
beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY);
|
beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY);
|
||||||
|
|
||||||
|
let layout = this.actor.layout_manager;
|
||||||
let iter = new Date(beginDate);
|
let iter = new Date(beginDate);
|
||||||
let row = 2;
|
let row = 2;
|
||||||
// nRows here means 6 weeks + one header + one navbar
|
// nRows here means 6 weeks + one header + one navbar
|
||||||
@ -648,16 +652,19 @@ const Calendar = new Lang.Class({
|
|||||||
button.style_class = styleClass;
|
button.style_class = styleClass;
|
||||||
|
|
||||||
let offsetCols = this._useWeekdate ? 1 : 0;
|
let offsetCols = this._useWeekdate ? 1 : 0;
|
||||||
this.actor.add(button,
|
let col;
|
||||||
{ row: row, col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7 });
|
if (rtl)
|
||||||
|
col = 6 - (7 + iter.getDay() - this._weekStart) % 7;
|
||||||
|
else
|
||||||
|
col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
|
||||||
|
layout.pack(button, col, row);
|
||||||
|
|
||||||
this._buttons.push(button);
|
this._buttons.push(button);
|
||||||
|
|
||||||
if (this._useWeekdate && iter.getDay() == 4) {
|
if (this._useWeekdate && iter.getDay() == 4) {
|
||||||
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
|
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
|
||||||
style_class: 'calendar-day-base calendar-week-number'});
|
style_class: 'calendar-day-base calendar-week-number'});
|
||||||
this.actor.add(label,
|
layout.pack(label, rtl ? 7 : 0, row);
|
||||||
{ row: row, col: 0, y_align: St.Align.MIDDLE });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
||||||
@ -700,9 +707,12 @@ const EventsList = new Lang.Class({
|
|||||||
Name: 'EventsList',
|
Name: 'EventsList',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this.actor = new St.Table({ style_class: 'events-table' });
|
let layout = new Clutter.TableLayout();
|
||||||
|
this.actor = new St.Widget({ style_class: 'events-table',
|
||||||
|
layout_manager: layout });
|
||||||
|
layout.hookup_style(this.actor);
|
||||||
this._date = new Date();
|
this._date = new Date();
|
||||||
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
||||||
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
|
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
|
||||||
this._weekStart = Shell.util_get_week_start();
|
this._weekStart = Shell.util_get_week_start();
|
||||||
},
|
},
|
||||||
@ -724,9 +734,13 @@ const EventsList = new Lang.Class({
|
|||||||
dayLabel.clutter_text.line_wrap = false;
|
dayLabel.clutter_text.line_wrap = false;
|
||||||
dayLabel.clutter_text.ellipsize = false;
|
dayLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
this.actor.add(dayLabel, { row: index, col: 0,
|
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
|
||||||
x_expand: false, x_align: St.Align.END,
|
|
||||||
y_fill: false, y_align: St.Align.START });
|
let layout = this.actor.layout_manager;
|
||||||
|
layout.pack(dayLabel, rtl ? 2 : 0, index);
|
||||||
|
layout.child_set(dayLabel, { x_expand: false,
|
||||||
|
x_align: Clutter.TableAlignment.END,
|
||||||
|
y_align: Clutter.TableAlignment.START });
|
||||||
|
|
||||||
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
||||||
let timeString = _formatEventTime(event, clockFormat);
|
let timeString = _formatEventTime(event, clockFormat);
|
||||||
@ -735,18 +749,17 @@ const EventsList = new Lang.Class({
|
|||||||
timeLabel.clutter_text.line_wrap = false;
|
timeLabel.clutter_text.line_wrap = false;
|
||||||
timeLabel.clutter_text.ellipsize = false;
|
timeLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
this.actor.add(timeLabel, { row: index, col: 1,
|
layout.pack(timeLabel, 1, index);
|
||||||
x_expand: false, x_align: St.Align.MIDDLE,
|
layout.child_set(timeLabel, { x_expand: false,
|
||||||
y_fill: false, y_align: St.Align.START });
|
y_align: Clutter.TableAlignment.START });
|
||||||
|
|
||||||
let titleLabel = new St.Label({ style_class: 'events-day-task',
|
let titleLabel = new St.Label({ style_class: 'events-day-task',
|
||||||
text: event.summary });
|
text: event.summary });
|
||||||
titleLabel.clutter_text.line_wrap = true;
|
titleLabel.clutter_text.line_wrap = true;
|
||||||
titleLabel.clutter_text.ellipsize = false;
|
titleLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
this.actor.add(titleLabel, { row: index, col: 2,
|
layout.pack(titleLabel, rtl ? 0 : 2, index);
|
||||||
x_expand: true, x_align: St.Align.START,
|
layout.child_set(titleLabel, { x_expand: true });
|
||||||
y_fill: false, y_align: St.Align.START });
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
|
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
|
||||||
@ -755,13 +768,10 @@ const EventsList = new Lang.Class({
|
|||||||
if (events.length == 0 && !showNothingScheduled)
|
if (events.length == 0 && !showNothingScheduled)
|
||||||
return index;
|
return index;
|
||||||
|
|
||||||
this.actor.add(new St.Label({ style_class: 'events-day-header', text: header }),
|
let label = new St.Label({ style_class: 'events-day-header', text: header });
|
||||||
{ row: index, col: 0, col_span: 3,
|
let layout = this.actor.layout_manager;
|
||||||
// In theory, x_expand should be true here, but x_expand
|
layout.pack(label, 0, index);
|
||||||
// is a property of the column for StTable, ie all day cells
|
layout.child_set(label, { column_span: 3, x_expand: false });
|
||||||
// get it too
|
|
||||||
x_expand: false, x_align: St.Align.START,
|
|
||||||
y_fill: false, y_align: St.Align.START });
|
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
for (let n = 0; n < events.length; n++) {
|
for (let n = 0; n < events.length; n++) {
|
||||||
|
@ -23,7 +23,7 @@ const AutomountManager = new Lang.Class({
|
|||||||
Name: 'AutomountManager',
|
Name: 'AutomountManager',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
|
||||||
this._volumeQueue = [];
|
this._volumeQueue = [];
|
||||||
this._session = new GnomeSession.SessionManager();
|
this._session = new GnomeSession.SessionManager();
|
||||||
this._session.connectSignal('InhibitorAdded',
|
this._session.connectSignal('InhibitorAdded',
|
||||||
|
@ -96,7 +96,7 @@ const ContentTypeDiscoverer = new Lang.Class({
|
|||||||
|
|
||||||
_init: function(callback) {
|
_init: function(callback) {
|
||||||
this._callback = callback;
|
this._callback = callback;
|
||||||
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
|
||||||
},
|
},
|
||||||
|
|
||||||
guessContentTypes: function(mount) {
|
guessContentTypes: function(mount) {
|
||||||
@ -441,7 +441,7 @@ const AutorunTransientDispatcher = new Lang.Class({
|
|||||||
_init: function(manager) {
|
_init: function(manager) {
|
||||||
this._manager = manager;
|
this._manager = manager;
|
||||||
this._sources = [];
|
this._sources = [];
|
||||||
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
|
||||||
},
|
},
|
||||||
|
|
||||||
_getAutorunSettingForType: function(contentType) {
|
_getAutorunSettingForType: function(contentType) {
|
||||||
|
@ -77,6 +77,7 @@ const NetworkSecretDialog = new Lang.Class({
|
|||||||
layout_manager: layout });
|
layout_manager: layout });
|
||||||
layout.hookup_style(secretTable);
|
layout.hookup_style(secretTable);
|
||||||
|
|
||||||
|
let rtl = secretTable.get_text_direction() == Clutter.TextDirection.RTL;
|
||||||
let initialFocusSet = false;
|
let initialFocusSet = false;
|
||||||
let pos = 0;
|
let pos = 0;
|
||||||
for (let i = 0; i < this._content.secrets.length; i++) {
|
for (let i = 0; i < this._content.secrets.length; i++) {
|
||||||
@ -116,10 +117,15 @@ const NetworkSecretDialog = new Lang.Class({
|
|||||||
} else
|
} else
|
||||||
secret.valid = true;
|
secret.valid = true;
|
||||||
|
|
||||||
layout.pack(label, 0, pos);
|
if (rtl) {
|
||||||
|
layout.pack(secret.entry, 0, pos);
|
||||||
|
layout.pack(label, 1, pos);
|
||||||
|
} else {
|
||||||
|
layout.pack(label, 0, pos);
|
||||||
|
layout.pack(secret.entry, 1, pos);
|
||||||
|
}
|
||||||
layout.child_set(label, { x_expand: false, y_fill: false,
|
layout.child_set(label, { x_expand: false, y_fill: false,
|
||||||
x_align: Clutter.TableAlignment.START });
|
x_align: Clutter.TableAlignment.START });
|
||||||
layout.pack(secret.entry, 1, pos);
|
|
||||||
pos++;
|
pos++;
|
||||||
|
|
||||||
if (secret.password)
|
if (secret.password)
|
||||||
|
@ -783,7 +783,6 @@ const ChatNotification = new Lang.Class({
|
|||||||
|
|
||||||
this._createScrollArea();
|
this._createScrollArea();
|
||||||
this._lastGroup = null;
|
this._lastGroup = null;
|
||||||
this._lastGroupActor = null;
|
|
||||||
|
|
||||||
// Keep track of the bottom position for the current adjustment and
|
// Keep track of the bottom position for the current adjustment and
|
||||||
// force a scroll to the bottom if things change while we were at the
|
// force a scroll to the bottom if things change while we were at the
|
||||||
@ -947,80 +946,76 @@ const ChatNotification = new Lang.Class({
|
|||||||
|
|
||||||
let format;
|
let format;
|
||||||
|
|
||||||
let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
let desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
||||||
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
||||||
|
let hasAmPm = date.toLocaleFormat('%p') != '';
|
||||||
|
|
||||||
switch (clockFormat) {
|
if (clockFormat == '24h' || !hasAmPm) {
|
||||||
case '24h':
|
// Show only the time if date is on today
|
||||||
// Show only the time if date is on today
|
if(daysAgo < 1){
|
||||||
if(daysAgo < 1){
|
/* Translators: Time in 24h format */
|
||||||
/* Translators: Time in 24h format */
|
format = _("%H\u2236%M");
|
||||||
format = _("%H\u2236%M");
|
}
|
||||||
}
|
// Show the word "Yesterday" and time if date is on yesterday
|
||||||
// Show the word "Yesterday" and time if date is on yesterday
|
else if(daysAgo <2){
|
||||||
else if(daysAgo <2){
|
/* Translators: this is the word "Yesterday" followed by a
|
||||||
/* Translators: this is the word "Yesterday" followed by a
|
time string in 24h format. i.e. "Yesterday, 14:30" */
|
||||||
time string in 24h format. i.e. "Yesterday, 14:30" */
|
// xgettext:no-c-format
|
||||||
// xgettext:no-c-format
|
format = _("Yesterday, %H\u2236%M");
|
||||||
format = _("Yesterday, %H\u2236%M");
|
}
|
||||||
}
|
// Show a week day and time if date is in the last week
|
||||||
// Show a week day and time if date is in the last week
|
else if (daysAgo < 7) {
|
||||||
else if (daysAgo < 7) {
|
/* Translators: this is the week day name followed by a time
|
||||||
/* Translators: this is the week day name followed by a time
|
string in 24h format. i.e. "Monday, 14:30" */
|
||||||
string in 24h format. i.e. "Monday, 14:30" */
|
// xgettext:no-c-format
|
||||||
// xgettext:no-c-format
|
format = _("%A, %H\u2236%M");
|
||||||
format = _("%A, %H\u2236%M");
|
|
||||||
|
|
||||||
} else if (date.getYear() == now.getYear()) {
|
} else if (date.getYear() == now.getYear()) {
|
||||||
/* Translators: this is the month name and day number
|
/* Translators: this is the month name and day number
|
||||||
followed by a time string in 24h format.
|
followed by a time string in 24h format.
|
||||||
i.e. "May 25, 14:30" */
|
i.e. "May 25, 14:30" */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d, %H\u2236%M");
|
format = _("%B %d, %H\u2236%M");
|
||||||
} else {
|
} else {
|
||||||
/* Translators: this is the month name, day number, year
|
/* Translators: this is the month name, day number, year
|
||||||
number followed by a time string in 24h format.
|
number followed by a time string in 24h format.
|
||||||
i.e. "May 25 2012, 14:30" */
|
i.e. "May 25 2012, 14:30" */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d %Y, %H\u2236%M");
|
format = _("%B %d %Y, %H\u2236%M");
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
default:
|
// Show only the time if date is on today
|
||||||
/* explicit fall-through */
|
if(daysAgo < 1){
|
||||||
case '12h':
|
/* Translators: Time in 24h format */
|
||||||
// Show only the time if date is on today
|
format = _("%l\u2236%M %p");
|
||||||
if(daysAgo < 1){
|
}
|
||||||
/* Translators: Time in 24h format */
|
// Show the word "Yesterday" and time if date is on yesterday
|
||||||
format = _("%l\u2236%M %p");
|
else if(daysAgo <2){
|
||||||
}
|
/* Translators: this is the word "Yesterday" followed by a
|
||||||
// Show the word "Yesterday" and time if date is on yesterday
|
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
||||||
else if(daysAgo <2){
|
// xgettext:no-c-format
|
||||||
/* Translators: this is the word "Yesterday" followed by a
|
format = _("Yesterday, %l\u2236%M %p");
|
||||||
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
}
|
||||||
// xgettext:no-c-format
|
// Show a week day and time if date is in the last week
|
||||||
format = _("Yesterday, %l\u2236%M %p");
|
else if (daysAgo < 7) {
|
||||||
}
|
/* Translators: this is the week day name followed by a time
|
||||||
// Show a week day and time if date is in the last week
|
string in 12h format. i.e. "Monday, 2:30 pm" */
|
||||||
else if (daysAgo < 7) {
|
// xgettext:no-c-format
|
||||||
/* Translators: this is the week day name followed by a time
|
format = _("%A, %l\u2236%M %p");
|
||||||
string in 12h format. i.e. "Monday, 2:30 pm" */
|
|
||||||
// xgettext:no-c-format
|
|
||||||
format = _("%A, %l\u2236%M %p");
|
|
||||||
|
|
||||||
} else if (date.getYear() == now.getYear()) {
|
} else if (date.getYear() == now.getYear()) {
|
||||||
/* Translators: this is the month name and day number
|
/* Translators: this is the month name and day number
|
||||||
followed by a time string in 12h format.
|
followed by a time string in 12h format.
|
||||||
i.e. "May 25, 2:30 pm" */
|
i.e. "May 25, 2:30 pm" */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d, %l\u2236%M %p");
|
format = _("%B %d, %l\u2236%M %p");
|
||||||
} else {
|
} else {
|
||||||
/* Translators: this is the month name, day number, year
|
/* Translators: this is the month name, day number, year
|
||||||
number followed by a time string in 12h format.
|
number followed by a time string in 12h format.
|
||||||
i.e. "May 25 2012, 2:30 pm"*/
|
i.e. "May 25 2012, 2:30 pm"*/
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d %Y, %l\u2236%M %p");
|
format = _("%B %d %Y, %l\u2236%M %p");
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return date.toLocaleFormat(format);
|
return date.toLocaleFormat(format);
|
||||||
},
|
},
|
||||||
|
@ -87,7 +87,7 @@ const CtrlAltTabManager = new Lang.Class({
|
|||||||
if (Main.sessionMode.hasWindows && !Main.overview.visible) {
|
if (Main.sessionMode.hasWindows && !Main.overview.visible) {
|
||||||
let screen = global.screen;
|
let screen = global.screen;
|
||||||
let display = screen.get_display();
|
let display = screen.get_display();
|
||||||
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ());
|
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen.get_active_workspace ());
|
||||||
let windowTracker = Shell.WindowTracker.get_default();
|
let windowTracker = Shell.WindowTracker.get_default();
|
||||||
let textureCache = St.TextureCache.get_default();
|
let textureCache = St.TextureCache.get_default();
|
||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
@ -165,6 +165,10 @@ const CtrlAltTabPopup = new Lang.Class({
|
|||||||
this._select(this._previous());
|
this._select(this._previous());
|
||||||
else if (keysym == Clutter.Right)
|
else if (keysym == Clutter.Right)
|
||||||
this._select(this._next());
|
this._select(this._next());
|
||||||
|
else
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
|
||||||
_finish : function(time) {
|
_finish : function(time) {
|
||||||
|
@ -18,8 +18,7 @@ const PanelMenu = imports.ui.panelMenu;
|
|||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Calendar = imports.ui.calendar;
|
const Calendar = imports.ui.calendar;
|
||||||
|
|
||||||
function _onVertSepRepaint (area)
|
function _onVertSepRepaint(area) {
|
||||||
{
|
|
||||||
let cr = area.get_context();
|
let cr = area.get_context();
|
||||||
let themeNode = area.get_theme_node();
|
let themeNode = area.get_theme_node();
|
||||||
let [width, height] = area.get_surface_size();
|
let [width, height] = area.get_surface_size();
|
||||||
@ -33,7 +32,7 @@ function _onVertSepRepaint (area)
|
|||||||
cr.setLineWidth(stippleWidth);
|
cr.setLineWidth(stippleWidth);
|
||||||
cr.stroke();
|
cr.stroke();
|
||||||
cr.$dispose();
|
cr.$dispose();
|
||||||
};
|
}
|
||||||
|
|
||||||
const DateMenuButton = new Lang.Class({
|
const DateMenuButton = new Lang.Class({
|
||||||
Name: 'DateMenuButton',
|
Name: 'DateMenuButton',
|
||||||
|
76
js/ui/edgeDragAction.js
Normal file
76
js/ui/edgeDragAction.js
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
let EDGE_THRESHOLD = 20;
|
||||||
|
let DRAG_DISTANCE = 80;
|
||||||
|
|
||||||
|
const EdgeDragAction = new Lang.Class({
|
||||||
|
Name: 'EdgeDragAction',
|
||||||
|
Extends: Clutter.GestureAction,
|
||||||
|
|
||||||
|
_init : function(side) {
|
||||||
|
this.parent();
|
||||||
|
this._side = side;
|
||||||
|
this.set_n_touch_points (1);
|
||||||
|
global.display.connect('grab-op-begin', Lang.bind(this, this.cancel));
|
||||||
|
global.display.connect('grab-op-end', Lang.bind(this, this.cancel));
|
||||||
|
},
|
||||||
|
|
||||||
|
_getMonitorRect : function (x, y) {
|
||||||
|
let rect = new Meta.Rectangle({ x: x - 1, y: y - 1, width: 1, height: 1 });
|
||||||
|
let monitorIndex = global.screen.get_monitor_index_for_rect(rect);
|
||||||
|
|
||||||
|
return global.screen.get_monitor_geometry(monitorIndex);
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
|
if (this.get_n_current_points() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let [x, y] = this.get_press_coords(0);
|
||||||
|
let monitorRect = this._getMonitorRect(x, y);
|
||||||
|
|
||||||
|
return ((this._side == St.Side.LEFT && x < monitorRect.x + EDGE_THRESHOLD) ||
|
||||||
|
(this._side == St.Side.RIGHT && x > monitorRect.x + monitorRect.width - EDGE_THRESHOLD) ||
|
||||||
|
(this._side == St.Side.TOP && y < monitorRect.y + EDGE_THRESHOLD) ||
|
||||||
|
(this._side == St.Side.BOTTOM && y > monitorRect.y + monitorRect.height - EDGE_THRESHOLD));
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_progress : function (action, actor) {
|
||||||
|
let [startX, startY] = this.get_press_coords(0);
|
||||||
|
let [x, y] = this.get_motion_coords(0);
|
||||||
|
let offsetX = Math.abs (x - startX);
|
||||||
|
let offsetY = Math.abs (y - startY);
|
||||||
|
|
||||||
|
if (offsetX < EDGE_THRESHOLD && offsetY < EDGE_THRESHOLD)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if ((offsetX > offsetY &&
|
||||||
|
(this._side == St.Side.TOP || this._side == St.Side.BOTTOM)) ||
|
||||||
|
(offsetY > offsetX &&
|
||||||
|
(this._side == St.Side.LEFT || this._side == St.Side.RIGHT))) {
|
||||||
|
this.cancel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_end : function (action, actor) {
|
||||||
|
let [startX, startY] = this.get_press_coords(0);
|
||||||
|
let [x, y] = this.get_motion_coords(0);
|
||||||
|
let monitorRect = this._getMonitorRect(startX, startY);
|
||||||
|
|
||||||
|
if ((this._side == St.Side.TOP && y > monitorRect.y + DRAG_DISTANCE) ||
|
||||||
|
(this._side == St.Side.BOTTOM && y < monitorRect.y + monitorRect.height - DRAG_DISTANCE) ||
|
||||||
|
(this._side == St.Side.LEFT && x > monitorRect.x + DRAG_DISTANCE) ||
|
||||||
|
(this._side == St.Side.RIGHT && x < monitorRect.x + monitorRect.width - DRAG_DISTANCE))
|
||||||
|
this.emit('activated');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(EdgeDragAction.prototype);
|
@ -32,11 +32,9 @@ const FocusCaretTracker = new Lang.Class({
|
|||||||
Name: 'FocusCaretTracker',
|
Name: 'FocusCaretTracker',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
Atspi.init();
|
|
||||||
Atspi.set_timeout(250, 250);
|
|
||||||
|
|
||||||
this._atspiListener = Atspi.EventListener.new(Lang.bind(this, this._onChanged));
|
this._atspiListener = Atspi.EventListener.new(Lang.bind(this, this._onChanged));
|
||||||
|
|
||||||
|
this._atspiInited = false;
|
||||||
this._focusListenerRegistered = false;
|
this._focusListenerRegistered = false;
|
||||||
this._caretListenerRegistered = false;
|
this._caretListenerRegistered = false;
|
||||||
},
|
},
|
||||||
@ -48,12 +46,20 @@ const FocusCaretTracker = new Lang.Class({
|
|||||||
this.emit('caret-moved', event);
|
this.emit('caret-moved', event);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_initAtspi: function() {
|
||||||
|
if (!this._atspiInited) {
|
||||||
|
Atspi.init();
|
||||||
|
Atspi.set_timeout(250, 250);
|
||||||
|
this._atspiInited = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
registerFocusListener: function() {
|
registerFocusListener: function() {
|
||||||
if (this._focusListenerRegistered)
|
if (this._focusListenerRegistered)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Ignore the return value, we get an exception if they fail
|
this._initAtspi();
|
||||||
// And they should never fail
|
|
||||||
this._atspiListener.register(STATECHANGED + ':focused');
|
this._atspiListener.register(STATECHANGED + ':focused');
|
||||||
this._atspiListener.register(STATECHANGED + ':selected');
|
this._atspiListener.register(STATECHANGED + ':selected');
|
||||||
this._focusListenerRegistered = true;
|
this._focusListenerRegistered = true;
|
||||||
@ -63,6 +69,8 @@ const FocusCaretTracker = new Lang.Class({
|
|||||||
if (this._caretListenerRegistered)
|
if (this._caretListenerRegistered)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._initAtspi();
|
||||||
|
|
||||||
this._atspiListener.register(CARETMOVED);
|
this._atspiListener.register(CARETMOVED);
|
||||||
this._caretListenerRegistered = true;
|
this._caretListenerRegistered = true;
|
||||||
},
|
},
|
||||||
|
@ -522,11 +522,6 @@ const IconGrid = new Lang.Class({
|
|||||||
this._fixedHItemSize = Math.max(this._hItemSize - neededSpacePerItem, MIN_ICON_SIZE);
|
this._fixedHItemSize = Math.max(this._hItemSize - neededSpacePerItem, MIN_ICON_SIZE);
|
||||||
this._fixedVItemSize = Math.max(this._vItemSize - neededSpacePerItem, MIN_ICON_SIZE);
|
this._fixedVItemSize = Math.max(this._vItemSize - neededSpacePerItem, MIN_ICON_SIZE);
|
||||||
|
|
||||||
if (this._fixedHItemSize < MIN_ICON_SIZE)
|
|
||||||
this._fixedHItemSize = MIN_ICON_SIZE;
|
|
||||||
if (this._fixedVItemSize < MIN_ICON_SIZE)
|
|
||||||
this._fixedVItemSize = MIN_ICON_SIZE;
|
|
||||||
|
|
||||||
this._updateSpacingForSize(availWidth, availHeight);
|
this._updateSpacingForSize(availWidth, availHeight);
|
||||||
}
|
}
|
||||||
let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize);
|
let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize);
|
||||||
@ -535,8 +530,8 @@ const IconGrid = new Lang.Class({
|
|||||||
|
|
||||||
// Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up
|
// Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up
|
||||||
_updateChildrenScale: function(scale) {
|
_updateChildrenScale: function(scale) {
|
||||||
|
let newIconSize = Math.floor(ICON_SIZE * scale);
|
||||||
for (let i in this._items) {
|
for (let i in this._items) {
|
||||||
let newIconSize = Math.floor(ICON_SIZE * scale);
|
|
||||||
this._items[i].icon.setIconSize(newIconSize);
|
this._items[i].icon.setIconSize(newIconSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,9 +161,9 @@ const Keyboard = new Lang.Class({
|
|||||||
|
|
||||||
this._timestamp = global.display.get_current_time_roundtrip();
|
this._timestamp = global.display.get_current_time_roundtrip();
|
||||||
|
|
||||||
this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA });
|
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
|
||||||
this._keyboardSettings.connect('changed', Lang.bind(this, this._settingsChanged));
|
this._keyboardSettings.connect('changed', Lang.bind(this, this._settingsChanged));
|
||||||
this._a11yApplicationsSettings = new Gio.Settings({ schema: A11Y_APPLICATIONS_SCHEMA });
|
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
||||||
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._settingsChanged));
|
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._settingsChanged));
|
||||||
this._settingsChanged();
|
this._settingsChanged();
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ const LayoutManager = new Lang.Class({
|
|||||||
// Normally, the stage is always covered so Clutter doesn't need to clear
|
// Normally, the stage is always covered so Clutter doesn't need to clear
|
||||||
// it; however it becomes visible during the startup animation
|
// it; however it becomes visible during the startup animation
|
||||||
// See the comment below for a longer explanation
|
// See the comment below for a longer explanation
|
||||||
global.stage.color = DEFAULT_BACKGROUND_COLOR;
|
global.stage.background_color = DEFAULT_BACKGROUND_COLOR;
|
||||||
|
|
||||||
// Set up stage hierarchy to group all UI actors under one container.
|
// Set up stage hierarchy to group all UI actors under one container.
|
||||||
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
|
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
|
||||||
@ -224,7 +224,7 @@ const LayoutManager = new Lang.Class({
|
|||||||
|
|
||||||
// A dummy actor that tracks the mouse or text cursor, based on the
|
// A dummy actor that tracks the mouse or text cursor, based on the
|
||||||
// position and size set in setDummyCursorGeometry.
|
// position and size set in setDummyCursorGeometry.
|
||||||
this.dummyCursor = new St.Widget({ width: 0, height: 0 });
|
this.dummyCursor = new St.Widget({ width: 0, height: 0, visible: false });
|
||||||
this.uiGroup.add_actor(this.dummyCursor);
|
this.uiGroup.add_actor(this.dummyCursor);
|
||||||
|
|
||||||
global.stage.remove_actor(global.top_window_group);
|
global.stage.remove_actor(global.top_window_group);
|
||||||
@ -1017,43 +1017,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Ensure that the strut rects goes all the way to the screen edge,
|
|
||||||
// as this really what mutter expects. However skip this step
|
|
||||||
// in cases where this would render an entire monitor unusable.
|
|
||||||
switch (side) {
|
|
||||||
case Meta.Side.TOP:
|
|
||||||
let hasMonitorsAbove = this.monitors.some(Lang.bind(this,
|
|
||||||
function(mon) {
|
|
||||||
return this._isAboveOrBelowPrimary(mon) &&
|
|
||||||
mon.y < primary.y;
|
|
||||||
}));
|
|
||||||
if (!hasMonitorsAbove)
|
|
||||||
y1 = 0;
|
|
||||||
break;
|
|
||||||
case Meta.Side.BOTTOM:
|
|
||||||
if (this.primaryIndex == this.bottomIndex)
|
|
||||||
y2 = global.screen_height;
|
|
||||||
break;
|
|
||||||
case Meta.Side.LEFT:
|
|
||||||
let hasMonitorsLeft = this.monitors.some(Lang.bind(this,
|
|
||||||
function(mon) {
|
|
||||||
return !this._isAboveOrBelowPrimary(mon) &&
|
|
||||||
mon.x < primary.x;
|
|
||||||
}));
|
|
||||||
if (!hasMonitorsLeft)
|
|
||||||
x1 = 0;
|
|
||||||
break;
|
|
||||||
case Meta.Side.RIGHT:
|
|
||||||
let hasMonitorsRight = this.monitors.some(Lang.bind(this,
|
|
||||||
function(mon) {
|
|
||||||
return !this._isAboveOrBelowPrimary(mon) &&
|
|
||||||
mon.x > primary.x;
|
|
||||||
}));
|
|
||||||
if (!hasMonitorsRight)
|
|
||||||
x2 = global.screen_width;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let strutRect = new Meta.Rectangle({ x: x1, y: y1, width: x2 - x1, height: y2 - y1});
|
let strutRect = new Meta.Rectangle({ x: x1, y: y1, width: x2 - x1, height: y2 - y1});
|
||||||
let strut = new Meta.Strut({ rect: strutRect, side: side });
|
let strut = new Meta.Strut({ rect: strutRect, side: side });
|
||||||
struts.push(strut);
|
struts.push(strut);
|
||||||
|
@ -797,7 +797,7 @@ const LookingGlass = new Lang.Class({
|
|||||||
reactive: true });
|
reactive: true });
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._globalKeyPressEvent));
|
this.actor.connect('key-press-event', Lang.bind(this, this._globalKeyPressEvent));
|
||||||
|
|
||||||
this._interfaceSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
this._interfaceSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
||||||
this._interfaceSettings.connect('changed::monospace-font-name',
|
this._interfaceSettings.connect('changed::monospace-font-name',
|
||||||
Lang.bind(this, this._updateFont));
|
Lang.bind(this, this._updateFont));
|
||||||
this._updateFont();
|
this._updateFont();
|
||||||
|
@ -441,8 +441,8 @@ const Magnifier = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_settingsInit: function(zoomRegion) {
|
_settingsInit: function(zoomRegion) {
|
||||||
this._appSettings = new Gio.Settings({ schema: APPLICATIONS_SCHEMA });
|
this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA });
|
||||||
this._settings = new Gio.Settings({ schema: MAGNIFIER_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA });
|
||||||
|
|
||||||
if (zoomRegion) {
|
if (zoomRegion) {
|
||||||
// Mag factor is accurate to two decimal places.
|
// Mag factor is accurate to two decimal places.
|
||||||
|
@ -9,7 +9,6 @@ const Mainloop = imports.mainloop;
|
|||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const GSystem = imports.gi.GSystem;
|
|
||||||
|
|
||||||
const Components = imports.ui.components;
|
const Components = imports.ui.components;
|
||||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
@ -75,7 +74,6 @@ let _startDate;
|
|||||||
let _defaultCssStylesheet = null;
|
let _defaultCssStylesheet = null;
|
||||||
let _cssStylesheet = null;
|
let _cssStylesheet = null;
|
||||||
let _a11ySettings = null;
|
let _a11ySettings = null;
|
||||||
let dynamicWorkspacesSchema = null;
|
|
||||||
|
|
||||||
function _sessionUpdated() {
|
function _sessionUpdated() {
|
||||||
_loadDefaultStylesheet();
|
_loadDefaultStylesheet();
|
||||||
@ -112,7 +110,6 @@ function start() {
|
|||||||
|
|
||||||
sessionMode = new SessionMode.SessionMode();
|
sessionMode = new SessionMode.SessionMode();
|
||||||
sessionMode.connect('updated', _sessionUpdated);
|
sessionMode.connect('updated', _sessionUpdated);
|
||||||
_initializePrefs();
|
|
||||||
_initializeUI();
|
_initializeUI();
|
||||||
|
|
||||||
shellDBusService = new ShellDBus.GnomeShell();
|
shellDBusService = new ShellDBus.GnomeShell();
|
||||||
@ -121,17 +118,6 @@ function start() {
|
|||||||
_sessionUpdated();
|
_sessionUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
function _initializePrefs() {
|
|
||||||
let keys = new Gio.Settings({ schema: sessionMode.overridesSchema }).list_keys();
|
|
||||||
for (let i = 0; i < keys.length; i++)
|
|
||||||
Meta.prefs_override_preference_schema(keys[i], sessionMode.overridesSchema);
|
|
||||||
|
|
||||||
if (keys.indexOf('dynamic-workspaces') > -1)
|
|
||||||
dynamicWorkspacesSchema = sessionMode.overridesSchema;
|
|
||||||
else
|
|
||||||
dynamicWorkspacesSchema = 'org.gnome.mutter';
|
|
||||||
}
|
|
||||||
|
|
||||||
function _initializeUI() {
|
function _initializeUI() {
|
||||||
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
|
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
|
||||||
// also initialize ShellAppSystem first. ShellAppSystem
|
// also initialize ShellAppSystem first. ShellAppSystem
|
||||||
@ -174,7 +160,7 @@ function _initializeUI() {
|
|||||||
layoutManager.init();
|
layoutManager.init();
|
||||||
overview.init();
|
overview.init();
|
||||||
|
|
||||||
_a11ySettings = new Gio.Settings({ schema: A11Y_SCHEMA });
|
_a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
|
||||||
|
|
||||||
global.display.connect('overlay-key', Lang.bind(overview, function () {
|
global.display.connect('overlay-key', Lang.bind(overview, function () {
|
||||||
if (!_a11ySettings.get_boolean (STICKY_KEYS_ENABLE))
|
if (!_a11ySettings.get_boolean (STICKY_KEYS_ENABLE))
|
||||||
@ -213,7 +199,12 @@ function _initializeUI() {
|
|||||||
if (screenShield) {
|
if (screenShield) {
|
||||||
screenShield.lockIfWasLocked();
|
screenShield.lockIfWasLocked();
|
||||||
}
|
}
|
||||||
if (LoginManager.haveSystemd() && sessionMode.currentMode === 'user') {
|
if (LoginManager.haveSystemd() &&
|
||||||
|
sessionMode.currentMode != 'gdm' &&
|
||||||
|
sessionMode.currentMode != 'initial-setup') {
|
||||||
|
// Do not import globally to not depend
|
||||||
|
// on systemd on non-systemd systems.
|
||||||
|
let GSystem = imports.gi.GSystem;
|
||||||
GSystem.log_structured_print('GNOME Shell started at ' + _startDate,
|
GSystem.log_structured_print('GNOME Shell started at ' + _startDate,
|
||||||
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
|
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
|
||||||
} else {
|
} else {
|
||||||
|
@ -15,6 +15,7 @@ const Signals = imports.signals;
|
|||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Tp = imports.gi.TelepathyGLib;
|
const Tp = imports.gi.TelepathyGLib;
|
||||||
|
|
||||||
|
const EdgeDragAction = imports.ui.edgeDragAction;
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
const GnomeSession = imports.misc.gnomeSession;
|
const GnomeSession = imports.misc.gnomeSession;
|
||||||
@ -111,7 +112,6 @@ const FocusGrabber = new Lang.Class({
|
|||||||
if (this._focused)
|
if (this._focused)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._prevFocusedWindow = global.display.focus_window;
|
|
||||||
this._prevKeyFocusActor = global.stage.get_key_focus();
|
this._prevKeyFocusActor = global.stage.get_key_focus();
|
||||||
|
|
||||||
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
||||||
@ -316,7 +316,7 @@ const NotificationGenericPolicy = new Lang.Class({
|
|||||||
|
|
||||||
this.id = 'generic';
|
this.id = 'generic';
|
||||||
|
|
||||||
this._masterSettings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications' });
|
this._masterSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.notifications' });
|
||||||
this._masterSettings.connect('changed', Lang.bind(this, this._changed));
|
this._masterSettings.connect('changed', Lang.bind(this, this._changed));
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -366,8 +366,8 @@ const NotificationApplicationPolicy = new Lang.Class({
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
this._canonicalId = this._canonicalizeId(id);
|
this._canonicalId = this._canonicalizeId(id);
|
||||||
|
|
||||||
this._masterSettings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications' });
|
this._masterSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.notifications' });
|
||||||
this._settings = new Gio.Settings({ schema: 'org.gnome.desktop.notifications.application',
|
this._settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.notifications.application',
|
||||||
path: '/org/gnome/desktop/notifications/application/' + this._canonicalId + '/' });
|
path: '/org/gnome/desktop/notifications/application/' + this._canonicalId + '/' });
|
||||||
|
|
||||||
this._masterSettings.connect('changed', Lang.bind(this, this._changed));
|
this._masterSettings.connect('changed', Lang.bind(this, this._changed));
|
||||||
@ -504,7 +504,6 @@ const Notification = new Lang.Class({
|
|||||||
this.bannerBodyMarkup = false;
|
this.bannerBodyMarkup = false;
|
||||||
this._bannerBodyAdded = false;
|
this._bannerBodyAdded = false;
|
||||||
this._titleFitsInBannerMode = true;
|
this._titleFitsInBannerMode = true;
|
||||||
this._titleDirection = Clutter.TextDirection.DEFAULT;
|
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
this._scrollPolicy = Gtk.PolicyType.AUTOMATIC;
|
this._scrollPolicy = Gtk.PolicyType.AUTOMATIC;
|
||||||
this._imageBin = null;
|
this._imageBin = null;
|
||||||
@ -643,10 +642,11 @@ const Notification = new Lang.Class({
|
|||||||
title = title ? _fixMarkup(title.replace(/\n/g, ' '), false) : '';
|
title = title ? _fixMarkup(title.replace(/\n/g, ' '), false) : '';
|
||||||
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
||||||
|
|
||||||
|
let titleDirection;
|
||||||
if (Pango.find_base_dir(title, -1) == Pango.Direction.RTL)
|
if (Pango.find_base_dir(title, -1) == Pango.Direction.RTL)
|
||||||
this._titleDirection = Clutter.TextDirection.RTL;
|
titleDirection = Clutter.TextDirection.RTL;
|
||||||
else
|
else
|
||||||
this._titleDirection = Clutter.TextDirection.LTR;
|
titleDirection = Clutter.TextDirection.LTR;
|
||||||
|
|
||||||
// Let the title's text direction control the overall direction
|
// Let the title's text direction control the overall direction
|
||||||
// of the notification - in case where different scripts are used
|
// of the notification - in case where different scripts are used
|
||||||
@ -654,7 +654,7 @@ const Notification = new Lang.Class({
|
|||||||
// arguably for action buttons as well. Labels other than the title
|
// arguably for action buttons as well. Labels other than the title
|
||||||
// will be allocated at the available width, so that their alignment
|
// will be allocated at the available width, so that their alignment
|
||||||
// is done correctly automatically.
|
// is done correctly automatically.
|
||||||
this._table.set_text_direction(this._titleDirection);
|
this._table.set_text_direction(titleDirection);
|
||||||
|
|
||||||
// Unless the notification has custom content, we save this.bannerBodyText
|
// Unless the notification has custom content, we save this.bannerBodyText
|
||||||
// to add it to the content of the notification if the notification is
|
// to add it to the content of the notification if the notification is
|
||||||
@ -1901,14 +1901,14 @@ const MessageTray = new Lang.Class({
|
|||||||
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
||||||
|
|
||||||
Main.wm.addKeybinding('toggle-message-tray',
|
Main.wm.addKeybinding('toggle-message-tray',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.NORMAL |
|
Shell.KeyBindingMode.NORMAL |
|
||||||
Shell.KeyBindingMode.MESSAGE_TRAY |
|
Shell.KeyBindingMode.MESSAGE_TRAY |
|
||||||
Shell.KeyBindingMode.OVERVIEW,
|
Shell.KeyBindingMode.OVERVIEW,
|
||||||
Lang.bind(this, this.toggleAndNavigate));
|
Lang.bind(this, this.toggleAndNavigate));
|
||||||
Main.wm.addKeybinding('focus-active-notification',
|
Main.wm.addKeybinding('focus-active-notification',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.NORMAL |
|
Shell.KeyBindingMode.NORMAL |
|
||||||
Shell.KeyBindingMode.MESSAGE_TRAY |
|
Shell.KeyBindingMode.MESSAGE_TRAY |
|
||||||
@ -1934,6 +1934,10 @@ const MessageTray = new Lang.Class({
|
|||||||
|
|
||||||
this._messageTrayMenuButton = new MessageTrayMenuButton(this);
|
this._messageTrayMenuButton = new MessageTrayMenuButton(this);
|
||||||
this.actor.add_actor(this._messageTrayMenuButton.actor);
|
this.actor.add_actor(this._messageTrayMenuButton.actor);
|
||||||
|
|
||||||
|
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM);
|
||||||
|
gesture.connect('activated', Lang.bind(this, this.toggle));
|
||||||
|
global.stage.add_action(gesture);
|
||||||
},
|
},
|
||||||
|
|
||||||
close: function() {
|
close: function() {
|
||||||
@ -2268,6 +2272,16 @@ const MessageTray = new Lang.Class({
|
|||||||
this._grabHelper.addActor(corner.actor);
|
this._grabHelper.addActor(corner.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_resetNotificationLeftTimeout: function() {
|
||||||
|
this._useLongerNotificationLeftTimeout = false;
|
||||||
|
if (this._notificationLeftTimeoutId) {
|
||||||
|
Mainloop.source_remove(this._notificationLeftTimeoutId);
|
||||||
|
this._notificationLeftTimeoutId = 0;
|
||||||
|
this._notificationLeftMouseX = -1;
|
||||||
|
this._notificationLeftMouseY = -1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_onNotificationHoverChanged: function() {
|
_onNotificationHoverChanged: function() {
|
||||||
if (this._notificationWidget.hover == this._notificationHovered)
|
if (this._notificationWidget.hover == this._notificationHovered)
|
||||||
return;
|
return;
|
||||||
@ -2277,14 +2291,7 @@ const MessageTray = new Lang.Class({
|
|||||||
// No dwell inside notifications at the bottom of the screen
|
// No dwell inside notifications at the bottom of the screen
|
||||||
this._cancelTrayDwell();
|
this._cancelTrayDwell();
|
||||||
|
|
||||||
this._useLongerNotificationLeftTimeout = false;
|
this._resetNotificationLeftTimeout();
|
||||||
if (this._notificationLeftTimeoutId) {
|
|
||||||
Mainloop.source_remove(this._notificationLeftTimeoutId);
|
|
||||||
this._notificationLeftTimeoutId = 0;
|
|
||||||
this._notificationLeftMouseX = -1;
|
|
||||||
this._notificationLeftMouseY = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._showNotificationMouseX >= 0) {
|
if (this._showNotificationMouseX >= 0) {
|
||||||
let actorAtShowNotificationPosition =
|
let actorAtShowNotificationPosition =
|
||||||
@ -2301,6 +2308,7 @@ const MessageTray = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._pointerInNotification = true;
|
this._pointerInNotification = true;
|
||||||
this._updateState();
|
this._updateState();
|
||||||
} else {
|
} else {
|
||||||
@ -2627,6 +2635,8 @@ const MessageTray = new Lang.Class({
|
|||||||
// the mouse is moving towards it or within it.
|
// the mouse is moving towards it or within it.
|
||||||
this._lastSeenMouseX = x;
|
this._lastSeenMouseX = x;
|
||||||
this._lastSeenMouseY = y;
|
this._lastSeenMouseY = y;
|
||||||
|
|
||||||
|
this._resetNotificationLeftTimeout();
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateShowingNotification: function() {
|
_updateShowingNotification: function() {
|
||||||
@ -2719,13 +2729,7 @@ const MessageTray = new Lang.Class({
|
|||||||
this._notificationUnfocusedId = 0;
|
this._notificationUnfocusedId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._useLongerNotificationLeftTimeout = false;
|
this._resetNotificationLeftTimeout();
|
||||||
if (this._notificationLeftTimeoutId) {
|
|
||||||
Mainloop.source_remove(this._notificationLeftTimeoutId);
|
|
||||||
this._notificationLeftTimeoutId = 0;
|
|
||||||
this._notificationLeftMouseX = -1;
|
|
||||||
this._notificationLeftMouseY = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (animate) {
|
if (animate) {
|
||||||
this._tween(this._notificationWidget, '_notificationState', State.HIDDEN,
|
this._tween(this._notificationWidget, '_notificationState', State.HIDDEN,
|
||||||
|
@ -192,6 +192,8 @@ const OsdWindow = new Lang.Class({
|
|||||||
_monitorsChanged: function() {
|
_monitorsChanged: function() {
|
||||||
/* assume 110x110 on a 640x480 display and scale from there */
|
/* assume 110x110 on a 640x480 display and scale from there */
|
||||||
let monitor = Main.layoutManager.monitors[this._monitorIndex];
|
let monitor = Main.layoutManager.monitors[this._monitorIndex];
|
||||||
|
if (!monitor)
|
||||||
|
return; // we are about to be removed
|
||||||
|
|
||||||
let scalew = monitor.width / 640.0;
|
let scalew = monitor.width / 640.0;
|
||||||
let scaleh = monitor.height / 480.0;
|
let scaleh = monitor.height / 480.0;
|
||||||
|
@ -41,8 +41,7 @@ const ButtonBox = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
_getPreferredWidth: function(actor, forHeight, alloc) {
|
||||||
let children = actor.get_children();
|
let child = actor.get_first_child();
|
||||||
let child = children.length > 0 ? children[0] : null;
|
|
||||||
|
|
||||||
if (child) {
|
if (child) {
|
||||||
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
|
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
|
||||||
@ -55,8 +54,7 @@ const ButtonBox = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||||
let children = actor.get_children();
|
let child = actor.get_first_child();
|
||||||
let child = children.length > 0 ? children[0] : null;
|
|
||||||
|
|
||||||
if (child) {
|
if (child) {
|
||||||
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
|
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
|
||||||
@ -66,13 +64,11 @@ const ButtonBox = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_allocate: function(actor, box, flags) {
|
_allocate: function(actor, box, flags) {
|
||||||
let children = actor.get_children();
|
let child = actor.get_first_child();
|
||||||
if (children.length == 0)
|
if (!child)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let child = children[0];
|
|
||||||
let [minWidth, natWidth] = child.get_preferred_width(-1);
|
let [minWidth, natWidth] = child.get_preferred_width(-1);
|
||||||
let [minHeight, natHeight] = child.get_preferred_height(-1);
|
|
||||||
|
|
||||||
let availWidth = box.x2 - box.x1;
|
let availWidth = box.x2 - box.x1;
|
||||||
let availHeight = box.y2 - box.y1;
|
let availHeight = box.y2 - box.y1;
|
||||||
|
@ -46,33 +46,28 @@ function isPopupMenuItemVisible(child) {
|
|||||||
* @side Side to which the arrow points.
|
* @side Side to which the arrow points.
|
||||||
*/
|
*/
|
||||||
function arrowIcon(side) {
|
function arrowIcon(side) {
|
||||||
let rotation;
|
let iconName;
|
||||||
switch (side) {
|
switch (side) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
rotation = 180;
|
iconName = 'pan-up-symbolic';
|
||||||
break;
|
break;
|
||||||
case St.Side.RIGHT:
|
case St.Side.RIGHT:
|
||||||
rotation = - 90;
|
iconName = 'pan-end-symbolic';
|
||||||
break;
|
break;
|
||||||
case St.Side.BOTTOM:
|
case St.Side.BOTTOM:
|
||||||
rotation = 0;
|
iconName = 'pan-down-symbolic';
|
||||||
break;
|
break;
|
||||||
case St.Side.LEFT:
|
case St.Side.LEFT:
|
||||||
rotation = 90;
|
iconName = 'pan-start-symbolic';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_path(global.datadir +
|
|
||||||
'/theme/menu-arrow-symbolic.svg') });
|
|
||||||
|
|
||||||
let arrow = new St.Icon({ style_class: 'popup-menu-arrow',
|
let arrow = new St.Icon({ style_class: 'popup-menu-arrow',
|
||||||
gicon: gicon,
|
icon_name: iconName,
|
||||||
accessible_role: Atk.Role.ARROW,
|
accessible_role: Atk.Role.ARROW,
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
y_align: Clutter.ActorAlign.CENTER });
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
|
||||||
arrow.rotation_angle_z = rotation;
|
|
||||||
|
|
||||||
return arrow;
|
return arrow;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,8 +246,16 @@ const PopupSeparatorMenuItem = new Lang.Class({
|
|||||||
this.actor.add(this.label);
|
this.actor.add(this.label);
|
||||||
this.actor.label_actor = this.label;
|
this.actor.label_actor = this.label;
|
||||||
|
|
||||||
|
this.label.connect('notify::text',
|
||||||
|
Lang.bind(this, this._syncVisibility));
|
||||||
|
this._syncVisibility();
|
||||||
|
|
||||||
this._separator = new Separator.HorizontalSeparator({ style_class: 'popup-separator-menu-item' });
|
this._separator = new Separator.HorizontalSeparator({ style_class: 'popup-separator-menu-item' });
|
||||||
this.actor.add(this._separator.actor, { expand: true });
|
this.actor.add(this._separator.actor, { expand: true });
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncVisibility: function() {
|
||||||
|
this.label.visible = this.label.text != '';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ function loadRemoteSearchProviders(callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
|
let searchSettings = new Gio.Settings({ schema_id: Search.SEARCH_PROVIDERS_SCHEMA });
|
||||||
if (searchSettings.get_boolean('disable-external')) {
|
if (searchSettings.get_boolean('disable-external')) {
|
||||||
callback([]);
|
callback([]);
|
||||||
return;
|
return;
|
||||||
|
@ -38,8 +38,8 @@ const RunDialog = new Lang.Class({
|
|||||||
this.parent({ styleClass: 'run-dialog',
|
this.parent({ styleClass: 'run-dialog',
|
||||||
destroyOnClose: false });
|
destroyOnClose: false });
|
||||||
|
|
||||||
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
|
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
|
||||||
this._terminalSettings = new Gio.Settings({ schema: TERMINAL_SCHEMA });
|
this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA });
|
||||||
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
|
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
|
||||||
this._enableInternalCommands = global.settings.get_boolean('development-tools');
|
this._enableInternalCommands = global.settings.get_boolean('development-tools');
|
||||||
}));
|
}));
|
||||||
|
@ -563,7 +563,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); }));
|
this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); }));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
|
||||||
|
|
||||||
this._isModal = false;
|
this._isModal = false;
|
||||||
this._hasLockScreen = false;
|
this._hasLockScreen = false;
|
||||||
|
@ -68,6 +68,13 @@ const ScreenshotService = new Lang.Class({
|
|||||||
Gio.DBus.session.own_name('org.gnome.Shell.Screenshot', Gio.BusNameOwnerFlags.REPLACE, null, null);
|
Gio.DBus.session.own_name('org.gnome.Shell.Screenshot', Gio.BusNameOwnerFlags.REPLACE, null, null);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_checkArea: function(x, y, width, height) {
|
||||||
|
return x >= 0 && y >= 0 &&
|
||||||
|
width > 0 && height > 0 &&
|
||||||
|
x + width <= global.screen_width &&
|
||||||
|
y + height <= global.screen_height;
|
||||||
|
},
|
||||||
|
|
||||||
_onScreenshotComplete: function(obj, result, area, filenameUsed, flash, invocation) {
|
_onScreenshotComplete: function(obj, result, area, filenameUsed, flash, invocation) {
|
||||||
if (flash && result) {
|
if (flash && result) {
|
||||||
let flashspot = new Flashspot(area);
|
let flashspot = new Flashspot(area);
|
||||||
@ -78,13 +85,31 @@ const ScreenshotService = new Lang.Class({
|
|||||||
invocation.return_value(retval);
|
invocation.return_value(retval);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_scaleArea: function(x, y, width, height) {
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
x *= scaleFactor;
|
||||||
|
y *= scaleFactor;
|
||||||
|
width *= scaleFactor;
|
||||||
|
height *= scaleFactor;
|
||||||
|
return [x, y, width, height];
|
||||||
|
},
|
||||||
|
|
||||||
|
_unscaleArea: function(x, y, width, height) {
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
x /= scaleFactor;
|
||||||
|
y /= scaleFactor;
|
||||||
|
width /= scaleFactor;
|
||||||
|
height /= scaleFactor;
|
||||||
|
return [x, y, width, height];
|
||||||
|
},
|
||||||
|
|
||||||
ScreenshotAreaAsync : function (params, invocation) {
|
ScreenshotAreaAsync : function (params, invocation) {
|
||||||
let [x, y, width, height, flash, filename, callback] = params;
|
let [x, y, width, height, flash, filename, callback] = params;
|
||||||
if (x < 0 || y < 0 ||
|
[x, y, width, height] = this._scaleArea(x, y, width, height);
|
||||||
width <= 0 || height <= 0 ||
|
if (!this._checkArea(x, y, width, height)) {
|
||||||
x + width > global.screen_width || y + height > global.screen_height) {
|
invocation.return_error_literal(Gio.IOErrorEnum,
|
||||||
invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
|
Gio.IOErrorEnum.CANCELLED,
|
||||||
"Invalid params");
|
"Invalid params");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let screenshot = new Shell.Screenshot();
|
let screenshot = new Shell.Screenshot();
|
||||||
@ -115,9 +140,9 @@ const ScreenshotService = new Lang.Class({
|
|||||||
selectArea.connect('finished', Lang.bind(this,
|
selectArea.connect('finished', Lang.bind(this,
|
||||||
function(selectArea, areaRectangle) {
|
function(selectArea, areaRectangle) {
|
||||||
if (areaRectangle) {
|
if (areaRectangle) {
|
||||||
let retval = GLib.Variant.new('(iiii)',
|
let retRectangle = this._unscaleArea(areaRectangle.x, areaRectangle.y,
|
||||||
[areaRectangle.x, areaRectangle.y,
|
areaRectangle.width, areaRectangle.height);
|
||||||
areaRectangle.width, areaRectangle.height]);
|
let retval = GLib.Variant.new('(iiii)', retRectangle);
|
||||||
invocation.return_value(retval);
|
invocation.return_value(retval);
|
||||||
} else {
|
} else {
|
||||||
invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
|
invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
|
||||||
@ -126,9 +151,18 @@ const ScreenshotService = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
FlashArea: function(x, y, width, height) {
|
FlashAreaAsync: function(params, invocation) {
|
||||||
|
let [x, y, width, height] = params;
|
||||||
|
[x, y, width, height] = this._scaleArea(x, y, width, height);
|
||||||
|
if (!this._checkArea(x, y, width, height)) {
|
||||||
|
invocation.return_error_literal(Gio.IOErrorEnum,
|
||||||
|
Gio.IOErrorEnum.CANCELLED,
|
||||||
|
"Invalid params");
|
||||||
|
return;
|
||||||
|
}
|
||||||
let flashspot = new Flashspot({ x : x, y : y, width: width, height: height});
|
let flashspot = new Flashspot({ x : x, y : y, width: width, height: height});
|
||||||
flashspot.fire();
|
flashspot.fire();
|
||||||
|
invocation.return_value(null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ const SearchSystem = new Lang.Class({
|
|||||||
|
|
||||||
this._registerProvider(new AppDisplay.AppSearchProvider());
|
this._registerProvider(new AppDisplay.AppSearchProvider());
|
||||||
|
|
||||||
this._searchSettings = new Gio.Settings({ schema: SEARCH_PROVIDERS_SCHEMA });
|
this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
|
||||||
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
|
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
|
||||||
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
|
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
|
||||||
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
|
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
|
||||||
|
@ -18,7 +18,6 @@ const _modes = {
|
|||||||
'restrictive': {
|
'restrictive': {
|
||||||
parentMode: null,
|
parentMode: null,
|
||||||
stylesheetName: 'gnome-shell.css',
|
stylesheetName: 'gnome-shell.css',
|
||||||
overridesSchema: 'org.gnome.shell.overrides',
|
|
||||||
hasOverview: false,
|
hasOverview: false,
|
||||||
showCalendarEvents: false,
|
showCalendarEvents: false,
|
||||||
allowSettings: false,
|
allowSettings: false,
|
||||||
|
66
js/ui/showOverviewAction.js
Normal file
66
js/ui/showOverviewAction.js
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
|
||||||
|
const ShowOverviewAction = new Lang.Class({
|
||||||
|
Name: 'ShowOverviewAction',
|
||||||
|
Extends: Clutter.GestureAction,
|
||||||
|
|
||||||
|
_init : function() {
|
||||||
|
this.parent();
|
||||||
|
this.set_n_touch_points (3);
|
||||||
|
global.display.connect('grab-op-begin', Lang.bind(this, this.cancel));
|
||||||
|
global.display.connect('grab-op-end', Lang.bind(this, this.cancel));
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
|
return this.get_n_current_points() == this.get_n_touch_points();
|
||||||
|
},
|
||||||
|
|
||||||
|
_getBoundingRect : function(motion) {
|
||||||
|
let minX, minY, maxX, maxY;
|
||||||
|
|
||||||
|
for (let i = 0; i < this.get_n_current_points(); i++) {
|
||||||
|
let x, y;
|
||||||
|
|
||||||
|
if (motion == true) {
|
||||||
|
[x, y] = this.get_motion_coords(i);
|
||||||
|
} else {
|
||||||
|
[x, y] = this.get_press_coords(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
minX = maxX = x;
|
||||||
|
minY = maxY = y;
|
||||||
|
} else {
|
||||||
|
minX = Math.min(minX, x);
|
||||||
|
minY = Math.min(minY, y);
|
||||||
|
maxX = Math.max(maxX, x);
|
||||||
|
maxY = Math.max(maxY, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Meta.Rectangle({ x: minX,
|
||||||
|
y: minY,
|
||||||
|
width: maxX - minX,
|
||||||
|
height: maxY - minY });
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_begin : function(action, actor) {
|
||||||
|
this._initialRect = this._getBoundingRect(false);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_end : function(action, actor) {
|
||||||
|
let rect = this._getBoundingRect(true);
|
||||||
|
let oldArea = this._initialRect.width * this._initialRect.height;
|
||||||
|
let newArea = rect.width * rect.height;
|
||||||
|
let areaDiff = newArea / oldArea;
|
||||||
|
|
||||||
|
this.emit('activated', areaDiff);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(ShowOverviewAction.prototype);
|
@ -48,7 +48,7 @@ const ATIndicator = new Lang.Class({
|
|||||||
|
|
||||||
this.actor.add_child(this._hbox);
|
this.actor.add_child(this._hbox);
|
||||||
|
|
||||||
this._a11ySettings = new Gio.Settings({ schema: A11Y_SCHEMA });
|
this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
|
||||||
this._a11ySettings.connect('changed::' + KEY_ALWAYS_SHOW, Lang.bind(this, this._queueSyncMenuVisibility));
|
this._a11ySettings.connect('changed::' + KEY_ALWAYS_SHOW, Lang.bind(this, this._queueSyncMenuVisibility));
|
||||||
|
|
||||||
let highContrast = this._buildHCItem();
|
let highContrast = this._buildHCItem();
|
||||||
@ -118,7 +118,7 @@ const ATIndicator = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_buildItem: function(string, schema, key) {
|
_buildItem: function(string, schema, key) {
|
||||||
let settings = new Gio.Settings({ schema: schema });
|
let settings = new Gio.Settings({ schema_id: schema });
|
||||||
let widget = this._buildItemExtended(string,
|
let widget = this._buildItemExtended(string,
|
||||||
settings.get_boolean(key),
|
settings.get_boolean(key),
|
||||||
settings.is_writable(key),
|
settings.is_writable(key),
|
||||||
@ -134,8 +134,8 @@ const ATIndicator = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_buildHCItem: function() {
|
_buildHCItem: function() {
|
||||||
let interfaceSettings = new Gio.Settings({ schema: DESKTOP_INTERFACE_SCHEMA });
|
let interfaceSettings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA });
|
||||||
let wmSettings = new Gio.Settings({ schema: WM_SCHEMA });
|
let wmSettings = new Gio.Settings({ schema_id: WM_SCHEMA });
|
||||||
let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME);
|
let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME);
|
||||||
let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME);
|
let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME);
|
||||||
let wmTheme = wmSettings.get_string(KEY_WM_THEME);
|
let wmTheme = wmSettings.get_string(KEY_WM_THEME);
|
||||||
@ -186,7 +186,7 @@ const ATIndicator = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_buildFontItem: function() {
|
_buildFontItem: function() {
|
||||||
let settings = new Gio.Settings({ schema: DESKTOP_INTERFACE_SCHEMA });
|
let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA });
|
||||||
|
|
||||||
let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
|
let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
|
||||||
let initial_setting = (factor > 1.0);
|
let initial_setting = (factor > 1.0);
|
||||||
|
@ -292,6 +292,10 @@ const InputSourcePopup = new Lang.Class({
|
|||||||
this._select(this._previous());
|
this._select(this._previous());
|
||||||
else if (keysym == Clutter.Right)
|
else if (keysym == Clutter.Right)
|
||||||
this._select(this._next());
|
this._select(this._next());
|
||||||
|
else
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
|
||||||
_finish : function() {
|
_finish : function() {
|
||||||
@ -361,18 +365,18 @@ const InputSourceIndicator = new Lang.Class({
|
|||||||
this._mruSources = [];
|
this._mruSources = [];
|
||||||
this._keybindingAction =
|
this._keybindingAction =
|
||||||
Main.wm.addKeybinding('switch-input-source',
|
Main.wm.addKeybinding('switch-input-source',
|
||||||
new Gio.Settings({ schema: "org.gnome.desktop.wm.keybindings" }),
|
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
|
||||||
Meta.KeyBindingFlags.REVERSES,
|
Meta.KeyBindingFlags.REVERSES,
|
||||||
Shell.KeyBindingMode.ALL,
|
Shell.KeyBindingMode.ALL,
|
||||||
Lang.bind(this, this._switchInputSource));
|
Lang.bind(this, this._switchInputSource));
|
||||||
this._keybindingActionBackward =
|
this._keybindingActionBackward =
|
||||||
Main.wm.addKeybinding('switch-input-source-backward',
|
Main.wm.addKeybinding('switch-input-source-backward',
|
||||||
new Gio.Settings({ schema: "org.gnome.desktop.wm.keybindings" }),
|
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
|
||||||
Meta.KeyBindingFlags.REVERSES |
|
Meta.KeyBindingFlags.REVERSES |
|
||||||
Meta.KeyBindingFlags.REVERSED,
|
Meta.KeyBindingFlags.IS_REVERSED,
|
||||||
Shell.KeyBindingMode.ALL,
|
Shell.KeyBindingMode.ALL,
|
||||||
Lang.bind(this, this._switchInputSource));
|
Lang.bind(this, this._switchInputSource));
|
||||||
this._settings = new Gio.Settings({ schema: DESKTOP_INPUT_SOURCES_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA });
|
||||||
this._settings.connect('changed::' + KEY_CURRENT_INPUT_SOURCE, Lang.bind(this, this._currentInputSourceChanged));
|
this._settings.connect('changed::' + KEY_CURRENT_INPUT_SOURCE, Lang.bind(this, this._currentInputSourceChanged));
|
||||||
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
|
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ const Indicator = new Lang.Class({
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
this.parent();
|
this.parent();
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: LOCATION_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: LOCATION_SCHEMA });
|
||||||
this._settings.connect('changed::' + MAX_ACCURACY_LEVEL,
|
this._settings.connect('changed::' + MAX_ACCURACY_LEVEL,
|
||||||
Lang.bind(this, this._onMaxAccuracyLevelChanged));
|
Lang.bind(this, this._onMaxAccuracyLevelChanged));
|
||||||
|
|
||||||
@ -191,8 +191,12 @@ const Indicator = new Lang.Class({
|
|||||||
let unpacked = properties.deep_unpack();
|
let unpacked = properties.deep_unpack();
|
||||||
if ("InUse" in unpacked)
|
if ("InUse" in unpacked)
|
||||||
this._syncIndicator();
|
this._syncIndicator();
|
||||||
if ("AvailableAccuracyLevel" in unpacked)
|
if ("AvailableAccuracyLevel" in unpacked) {
|
||||||
this._availableAccuracyLevel = this._proxy.AvailableAccuracyLevel;
|
this._availableAccuracyLevel = this._proxy.AvailableAccuracyLevel;
|
||||||
|
|
||||||
|
if (this._getMaxAccuracyLevel() != 0)
|
||||||
|
this._settings.set_enum(MAX_ACCURACY_LEVEL, this._availableAccuracyLevel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -44,6 +44,33 @@ const NM80211Mode = NetworkManager['80211Mode'];
|
|||||||
const NM80211ApFlags = NetworkManager['80211ApFlags'];
|
const NM80211ApFlags = NetworkManager['80211ApFlags'];
|
||||||
const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
|
const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
|
||||||
|
|
||||||
|
const PortalHelperResult = {
|
||||||
|
CANCELLED: 0,
|
||||||
|
COMPLETED: 1,
|
||||||
|
RECHECK: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
const PortalHelperIface = '<node> \
|
||||||
|
<interface name="org.gnome.Shell.PortalHelper"> \
|
||||||
|
<method name="Authenticate"> \
|
||||||
|
<arg type="o" direction="in" name="connection" /> \
|
||||||
|
<arg type="s" direction="in" name="url" /> \
|
||||||
|
<arg type="u" direction="in" name="timestamp" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="Close"> \
|
||||||
|
<arg type="o" direction="in" name="connection" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="Refresh"> \
|
||||||
|
<arg type="o" direction="in" name="connection" /> \
|
||||||
|
</method> \
|
||||||
|
<signal name="Done"> \
|
||||||
|
<arg type="o" name="connection" /> \
|
||||||
|
<arg type="u" name="result" /> \
|
||||||
|
</signal> \
|
||||||
|
</interface> \
|
||||||
|
</node>';
|
||||||
|
const PortalHelperProxy = Gio.DBusProxy.makeProxyWrapper(PortalHelperIface);
|
||||||
|
|
||||||
function ssidCompare(one, two) {
|
function ssidCompare(one, two) {
|
||||||
if (!one || !two)
|
if (!one || !two)
|
||||||
return false;
|
return false;
|
||||||
@ -207,13 +234,23 @@ const NMConnectionSection = new Lang.Class({
|
|||||||
this.item.menu.addMenuItem(this._labelSection);
|
this.item.menu.addMenuItem(this._labelSection);
|
||||||
this.item.menu.addMenuItem(this._radioSection);
|
this.item.menu.addMenuItem(this._radioSection);
|
||||||
|
|
||||||
this.connect('icon-changed', Lang.bind(this, this._sync));
|
this._notifyConnectivityId = this._client.connect('notify::connectivity', Lang.bind(this, this._iconChanged));
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
|
if (this._notifyConnectivityId != 0) {
|
||||||
|
this._client.disconnect(this._notifyConnectivityId);
|
||||||
|
this._notifyConnectivityId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
this.item.destroy();
|
this.item.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_iconChanged: function() {
|
||||||
|
this._sync();
|
||||||
|
this.emit('icon-changed');
|
||||||
|
},
|
||||||
|
|
||||||
_sync: function() {
|
_sync: function() {
|
||||||
let nItems = this._connectionItems.size;
|
let nItems = this._connectionItems.size;
|
||||||
|
|
||||||
@ -278,7 +315,7 @@ const NMConnectionSection = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
item.connect('icon-changed', Lang.bind(this, function() {
|
item.connect('icon-changed', Lang.bind(this, function() {
|
||||||
this.emit('icon-changed');
|
this._iconChanged();
|
||||||
}));
|
}));
|
||||||
item.connect('activation-failed', Lang.bind(this, function(item, reason) {
|
item.connect('activation-failed', Lang.bind(this, function(item, reason) {
|
||||||
this.emit('activation-failed', reason);
|
this.emit('activation-failed', reason);
|
||||||
@ -523,7 +560,7 @@ const NMDeviceModem = new Lang.Class({
|
|||||||
if (this._mobileDevice) {
|
if (this._mobileDevice) {
|
||||||
this._operatorNameId = this._mobileDevice.connect('notify::operator-name', Lang.bind(this, this._sync));
|
this._operatorNameId = this._mobileDevice.connect('notify::operator-name', Lang.bind(this, this._sync));
|
||||||
this._signalQualityId = this._mobileDevice.connect('notify::signal-quality', Lang.bind(this, function() {
|
this._signalQualityId = this._mobileDevice.connect('notify::signal-quality', Lang.bind(this, function() {
|
||||||
this.emit('icon-changed');
|
this._iconChanged();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1145,10 +1182,16 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
this._wirelessHwEnabledChangedId = this._client.connect('notify::wireless-hardware-enabled', Lang.bind(this, this._sync));
|
this._wirelessHwEnabledChangedId = this._client.connect('notify::wireless-hardware-enabled', Lang.bind(this, this._sync));
|
||||||
this._activeApChangedId = this._device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged));
|
this._activeApChangedId = this._device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged));
|
||||||
this._stateChangedId = this._device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
|
this._stateChangedId = this._device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
|
||||||
|
this._notifyConnectivityId = this._client.connect('notify::connectivity', Lang.bind(this, this._iconChanged));
|
||||||
|
|
||||||
this._sync();
|
this._sync();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_iconChanged: function() {
|
||||||
|
this._sync();
|
||||||
|
this.emit('icon-changed');
|
||||||
|
},
|
||||||
|
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
if (this._activeApChangedId) {
|
if (this._activeApChangedId) {
|
||||||
GObject.Object.prototype.disconnect.call(this._device, this._activeApChangedId);
|
GObject.Object.prototype.disconnect.call(this._device, this._activeApChangedId);
|
||||||
@ -1174,6 +1217,10 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
this._dialog.destroy();
|
this._dialog.destroy();
|
||||||
this._dialog = null;
|
this._dialog = null;
|
||||||
}
|
}
|
||||||
|
if (this._notifyConnectivityId) {
|
||||||
|
this._client.disconnect(this._notifyConnectivityId);
|
||||||
|
this._notifyConnectivityId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
this.item.destroy();
|
this.item.destroy();
|
||||||
},
|
},
|
||||||
@ -1211,7 +1258,7 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_strengthChanged: function() {
|
_strengthChanged: function() {
|
||||||
this.emit('icon-changed');
|
this._iconChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
_activeApChanged: function() {
|
_activeApChanged: function() {
|
||||||
@ -1561,6 +1608,7 @@ const NMApplet = new Lang.Class({
|
|||||||
|
|
||||||
this._activeConnections = [ ];
|
this._activeConnections = [ ];
|
||||||
this._connections = [ ];
|
this._connections = [ ];
|
||||||
|
this._connectivityQueue = [ ];
|
||||||
|
|
||||||
this._mainConnection = null;
|
this._mainConnection = null;
|
||||||
this._mainConnectionIconChangedId = 0;
|
this._mainConnectionIconChangedId = 0;
|
||||||
@ -1589,6 +1637,7 @@ const NMApplet = new Lang.Class({
|
|||||||
this._client.connect('notify::primary-connection', Lang.bind(this, this._syncMainConnection));
|
this._client.connect('notify::primary-connection', Lang.bind(this, this._syncMainConnection));
|
||||||
this._client.connect('notify::activating-connection', Lang.bind(this, this._syncMainConnection));
|
this._client.connect('notify::activating-connection', Lang.bind(this, this._syncMainConnection));
|
||||||
this._client.connect('notify::active-connections', Lang.bind(this, this._syncVPNConnections));
|
this._client.connect('notify::active-connections', Lang.bind(this, this._syncVPNConnections));
|
||||||
|
this._client.connect('notify::connectivity', Lang.bind(this, this._syncConnectivity));
|
||||||
this._client.connect('device-added', Lang.bind(this, this._deviceAdded));
|
this._client.connect('device-added', Lang.bind(this, this._deviceAdded));
|
||||||
this._client.connect('device-removed', Lang.bind(this, this._deviceRemoved));
|
this._client.connect('device-removed', Lang.bind(this, this._deviceRemoved));
|
||||||
this._settings.connect('new-connection', Lang.bind(this, this._newConnection));
|
this._settings.connect('new-connection', Lang.bind(this, this._newConnection));
|
||||||
@ -1757,6 +1806,7 @@ const NMApplet = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._updateIcon();
|
this._updateIcon();
|
||||||
|
this._syncConnectivity();
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncVPNConnections: function() {
|
_syncVPNConnections: function() {
|
||||||
@ -1862,6 +1912,97 @@ const NMApplet = new Lang.Class({
|
|||||||
_syncNMState: function() {
|
_syncNMState: function() {
|
||||||
this.indicators.visible = this._client.manager_running;
|
this.indicators.visible = this._client.manager_running;
|
||||||
this.menu.actor.visible = this._client.networking_enabled;
|
this.menu.actor.visible = this._client.networking_enabled;
|
||||||
|
|
||||||
|
this._syncConnectivity();
|
||||||
|
},
|
||||||
|
|
||||||
|
_flushConnectivityQueue: function() {
|
||||||
|
if (this._portalHelperProxy) {
|
||||||
|
for (let item of this._connectivityQueue)
|
||||||
|
this._portalHelperProxy.CloseRemote(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._connectivityQueue = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
_closeConnectivityCheck: function(path) {
|
||||||
|
let index = this._connectivityQueue.indexOf(path);
|
||||||
|
|
||||||
|
if (index >= 0) {
|
||||||
|
if (this._portalHelperProxy)
|
||||||
|
this._portalHelperProxy.CloseRemote(path);
|
||||||
|
|
||||||
|
this._connectivityQueue.splice(index, 1);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_portalHelperDone: function(proxy, emitter, parameters) {
|
||||||
|
let [path, result] = parameters;
|
||||||
|
|
||||||
|
if (result == PortalHelperResult.CANCELLED) {
|
||||||
|
// Keep the connection in the queue, so the user is not
|
||||||
|
// spammed with more logins until we next flush the queue,
|
||||||
|
// which will happen once he chooses a better connection
|
||||||
|
// or we get to full connectivity through other means
|
||||||
|
} else if (result == PortalHelperResult.COMPLETED) {
|
||||||
|
this._closeConnectivityCheck(path);
|
||||||
|
return;
|
||||||
|
} else if (result == PortalHelperResult.RECHECK) {
|
||||||
|
this._client.check_connectivity_async(null, Lang.bind(this, function(client, result) {
|
||||||
|
try {
|
||||||
|
let state = client.check_connectivity_finish(result);
|
||||||
|
if (state >= NetworkManager.ConnectivityState.FULL)
|
||||||
|
this._closeConnectivityCheck(path);
|
||||||
|
} catch(e) { }
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
log('Invalid result from portal helper: ' + result);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncConnectivity: function() {
|
||||||
|
if (this._mainConnection == null ||
|
||||||
|
this._mainConnection.state != NetworkManager.ActiveConnectionState.ACTIVATED) {
|
||||||
|
this._flushConnectivityQueue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let isPortal = this._client.connectivity == NetworkManager.ConnectivityState.PORTAL;
|
||||||
|
// For testing, allow interpreting any value != FULL as PORTAL, because
|
||||||
|
// LIMITED (no upstream route after the default gateway) is easy to obtain
|
||||||
|
// with a tethered phone
|
||||||
|
// NONE is also possible, with a connection configured to force no default route
|
||||||
|
// (but in general we should only prompt a portal if we know there is a portal)
|
||||||
|
if (GLib.getenv('GNOME_SHELL_CONNECTIVITY_TEST') != null)
|
||||||
|
isPortal = isPortal || this._client.connectivity < NetworkManager.ConnectivityState.FULL;
|
||||||
|
if (!isPortal)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let path = this._mainConnection.get_path();
|
||||||
|
for (let item of this._connectivityQueue) {
|
||||||
|
if (item == path)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let timestamp = global.get_current_time();
|
||||||
|
if (this._portalHelperProxy) {
|
||||||
|
this._portalHelperProxy.AuthenticateRemote(path, '', timestamp);
|
||||||
|
} else {
|
||||||
|
new PortalHelperProxy(Gio.DBus.session, 'org.gnome.Shell.PortalHelper',
|
||||||
|
'/org/gnome/Shell/PortalHelper', Lang.bind(this, function (proxy, error) {
|
||||||
|
if (error) {
|
||||||
|
log('Error launching the portal helper: ' + error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._portalHelperProxy = proxy;
|
||||||
|
proxy.connectSignal('Done', Lang.bind(this, this._portalHelperDone));
|
||||||
|
|
||||||
|
proxy.AuthenticateRemote(path, '', timestamp);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._connectivityQueue.push(path);
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateIcon: function() {
|
_updateIcon: function() {
|
||||||
|
@ -4,6 +4,7 @@ const Gio = imports.gi.Gio;
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
@ -87,6 +88,14 @@ const Indicator = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
this._item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
this._item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
|
||||||
this.menu.addMenuItem(this._item);
|
this.menu.addMenuItem(this._item);
|
||||||
|
|
||||||
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
||||||
|
this._sessionUpdated();
|
||||||
|
},
|
||||||
|
|
||||||
|
_sessionUpdated: function() {
|
||||||
|
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
||||||
|
this.menu.setSensitive(sensitive);
|
||||||
},
|
},
|
||||||
|
|
||||||
_sync: function() {
|
_sync: function() {
|
||||||
|
@ -56,7 +56,10 @@ const AltSwitcher = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.actor.get_child() != childToShow) {
|
if (this.actor.get_child() != childToShow) {
|
||||||
|
let hasFocus = this.actor.contains(global.stage.get_key_focus());
|
||||||
this.actor.set_child(childToShow);
|
this.actor.set_child(childToShow);
|
||||||
|
if (hasFocus)
|
||||||
|
childToShow.grab_key_focus();
|
||||||
|
|
||||||
// The actors might respond to hover, so
|
// The actors might respond to hover, so
|
||||||
// sync the pointer to make sure they update.
|
// sync the pointer to make sure they update.
|
||||||
@ -92,11 +95,11 @@ const Indicator = new Lang.Class({
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
this.parent();
|
this.parent();
|
||||||
|
|
||||||
this._screenSaverSettings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
|
this._screenSaverSettings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
|
||||||
this._loginScreenSettings = new Gio.Settings({ schema: LOGIN_SCREEN_SCHEMA });
|
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
||||||
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
|
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
|
||||||
this._privacySettings = new Gio.Settings({ schema: PRIVACY_SCHEMA });
|
this._privacySettings = new Gio.Settings({ schema_id: PRIVACY_SCHEMA });
|
||||||
this._orientationSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.peripherals.touchscreen' });
|
this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' });
|
||||||
|
|
||||||
this._session = new GnomeSession.SessionManager();
|
this._session = new GnomeSession.SessionManager();
|
||||||
this._loginManager = LoginManager.getLoginManager();
|
this._loginManager = LoginManager.getLoginManager();
|
||||||
|
@ -190,10 +190,11 @@ const SwitcherPopup = new Lang.Class({
|
|||||||
|
|
||||||
this._disableHover();
|
this._disableHover();
|
||||||
|
|
||||||
|
if (this._keyPressHandler(keysym, backwards, action) != Clutter.EVENT_PROPAGATE)
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
|
||||||
if (keysym == Clutter.Escape)
|
if (keysym == Clutter.Escape)
|
||||||
this.destroy();
|
this.destroy();
|
||||||
else
|
|
||||||
this._keyPressHandler(keysym, backwards, action);
|
|
||||||
|
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
@ -62,7 +62,7 @@ const UnlockDialog = new Lang.Class({
|
|||||||
|
|
||||||
this.allowCancel = false;
|
this.allowCancel = false;
|
||||||
|
|
||||||
let screenSaverSettings = new Gio.Settings({ schema: 'org.gnome.desktop.screensaver' });
|
let screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
|
||||||
if (screenSaverSettings.get_boolean('user-switch-enabled')) {
|
if (screenSaverSettings.get_boolean('user-switch-enabled')) {
|
||||||
let otherUserLabel = new St.Label({ text: _("Log in as another user"),
|
let otherUserLabel = new St.Label({ text: _("Log in as another user"),
|
||||||
style_class: 'login-dialog-not-listed-label' });
|
style_class: 'login-dialog-not-listed-label' });
|
||||||
|
@ -11,6 +11,8 @@ const Lang = imports.lang;
|
|||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const EdgeDragAction = imports.ui.edgeDragAction;
|
||||||
|
const ShowOverviewAction = imports.ui.showOverviewAction;
|
||||||
const AppDisplay = imports.ui.appDisplay;
|
const AppDisplay = imports.ui.appDisplay;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const OverviewControls = imports.ui.overviewControls;
|
const OverviewControls = imports.ui.overviewControls;
|
||||||
@ -83,10 +85,10 @@ const ViewSelector = new Lang.Class({
|
|||||||
icon_name: 'edit-find-symbolic' }));
|
icon_name: 'edit-find-symbolic' }));
|
||||||
if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
|
if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
|
||||||
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
||||||
icon_name: 'edit-clear-rtl-symbolic' });
|
icon_name: 'edit-clear-symbolic-rtl' });
|
||||||
else
|
else
|
||||||
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
||||||
icon_name: 'edit-clear-symbolic' });
|
icon_name: 'edit-clear-symbolic-ltr' });
|
||||||
|
|
||||||
this._iconClickedId = 0;
|
this._iconClickedId = 0;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
@ -132,19 +134,34 @@ const ViewSelector = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
Main.wm.addKeybinding('toggle-application-view',
|
Main.wm.addKeybinding('toggle-application-view',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.NORMAL |
|
Shell.KeyBindingMode.NORMAL |
|
||||||
Shell.KeyBindingMode.OVERVIEW,
|
Shell.KeyBindingMode.OVERVIEW,
|
||||||
Lang.bind(this, this._toggleAppsPage));
|
Lang.bind(this, this._toggleAppsPage));
|
||||||
|
|
||||||
Main.wm.addKeybinding('toggle-overview',
|
Main.wm.addKeybinding('toggle-overview',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.NORMAL |
|
Shell.KeyBindingMode.NORMAL |
|
||||||
Shell.KeyBindingMode.OVERVIEW,
|
Shell.KeyBindingMode.OVERVIEW,
|
||||||
Lang.bind(Main.overview, Main.overview.toggle));
|
Lang.bind(Main.overview, Main.overview.toggle));
|
||||||
|
|
||||||
|
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.RIGHT);
|
||||||
|
gesture.connect('activated', Lang.bind(this, function() {
|
||||||
|
if (Main.overview.visible)
|
||||||
|
Main.overview.hide();
|
||||||
|
else
|
||||||
|
this.showApps();
|
||||||
|
}));
|
||||||
|
global.stage.add_action(gesture);
|
||||||
|
|
||||||
|
gesture = new ShowOverviewAction.ShowOverviewAction();
|
||||||
|
gesture.connect('activated', Lang.bind(this, function(action, areaDiff) {
|
||||||
|
if (areaDiff < 0.7)
|
||||||
|
Main.overview.show();
|
||||||
|
}));
|
||||||
|
global.stage.add_action(gesture);
|
||||||
},
|
},
|
||||||
|
|
||||||
_toggleAppsPage: function() {
|
_toggleAppsPage: function() {
|
||||||
@ -282,13 +299,13 @@ const ViewSelector = new Lang.Class({
|
|||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
} else if (this._shouldTriggerSearch(symbol)) {
|
} else if (this._shouldTriggerSearch(symbol)) {
|
||||||
this.startSearch(event);
|
this.startSearch(event);
|
||||||
} else if (!this._searchActive) {
|
} else if (!this._searchActive && !global.stage.key_focus) {
|
||||||
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
|
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
|
||||||
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
return true;
|
return Clutter.EVENT_STOP;
|
||||||
} else if (symbol == Clutter.ISO_Left_Tab) {
|
} else if (symbol == Clutter.ISO_Left_Tab) {
|
||||||
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false);
|
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false);
|
||||||
return true;
|
return Clutter.EVENT_STOP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
@ -11,10 +11,13 @@ const St = imports.gi.St;
|
|||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
const AltTab = imports.ui.altTab;
|
const AltTab = imports.ui.altTab;
|
||||||
|
const WorkspaceSwitchAction = imports.ui.workspaceSwitchAction;
|
||||||
|
const AppSwitchAction = imports.ui.appSwitchAction;
|
||||||
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
|
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const WindowMenu = imports.ui.windowMenu;
|
||||||
|
|
||||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||||
const WINDOW_ANIMATION_TIME = 0.25;
|
const WINDOW_ANIMATION_TIME = 0.25;
|
||||||
@ -198,12 +201,19 @@ const WorkspaceTracker = new Lang.Class({
|
|||||||
global.screen.connect('window-left-monitor', Lang.bind(this, this._windowLeftMonitor));
|
global.screen.connect('window-left-monitor', Lang.bind(this, this._windowLeftMonitor));
|
||||||
global.screen.connect('restacked', Lang.bind(this, this._windowsRestacked));
|
global.screen.connect('restacked', Lang.bind(this, this._windowsRestacked));
|
||||||
|
|
||||||
this._workspaceSettings = new Gio.Settings({ schema: Main.dynamicWorkspacesSchema });
|
this._workspaceSettings = this._getWorkspaceSettings();
|
||||||
this._workspaceSettings.connect('changed::dynamic-workspaces', Lang.bind(this, this._queueCheckWorkspaces));
|
this._workspaceSettings.connect('changed::dynamic-workspaces', Lang.bind(this, this._queueCheckWorkspaces));
|
||||||
|
|
||||||
this._nWorkspacesChanged();
|
this._nWorkspacesChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_getWorkspaceSettings: function() {
|
||||||
|
let settings = global.get_overrides_settings();
|
||||||
|
if (settings.list_keys().indexOf('dynamic-workspaces') > -1)
|
||||||
|
return settings;
|
||||||
|
return new Gio.Settings({ schema_id: 'org.gnome.mutter' });
|
||||||
|
},
|
||||||
|
|
||||||
_checkWorkspaces: function() {
|
_checkWorkspaces: function() {
|
||||||
let i;
|
let i;
|
||||||
let emptyWorkspaces = [];
|
let emptyWorkspaces = [];
|
||||||
@ -463,8 +473,6 @@ const WindowManager = new Lang.Class({
|
|||||||
|
|
||||||
this._dimmedWindows = [];
|
this._dimmedWindows = [];
|
||||||
|
|
||||||
this._animationBlockCount = 0;
|
|
||||||
|
|
||||||
this._allowedKeybindings = {};
|
this._allowedKeybindings = {};
|
||||||
|
|
||||||
this._switchData = null;
|
this._switchData = null;
|
||||||
@ -480,6 +488,7 @@ const WindowManager = new Lang.Class({
|
|||||||
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
|
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
|
||||||
this._shellwm.connect('show-tile-preview', Lang.bind(this, this._showTilePreview));
|
this._shellwm.connect('show-tile-preview', Lang.bind(this, this._showTilePreview));
|
||||||
this._shellwm.connect('hide-tile-preview', Lang.bind(this, this._hideTilePreview));
|
this._shellwm.connect('hide-tile-preview', Lang.bind(this, this._hideTilePreview));
|
||||||
|
this._shellwm.connect('show-window-menu', Lang.bind(this, this._showWindowMenu));
|
||||||
this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow));
|
this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow));
|
||||||
this._shellwm.connect('maximize', Lang.bind(this, this._maximizeWindow));
|
this._shellwm.connect('maximize', Lang.bind(this, this._maximizeWindow));
|
||||||
this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow));
|
this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow));
|
||||||
@ -648,13 +657,13 @@ const WindowManager = new Lang.Class({
|
|||||||
Lang.bind(this, this._startA11ySwitcher));
|
Lang.bind(this, this._startA11ySwitcher));
|
||||||
|
|
||||||
this.addKeybinding('pause-resume-tweens',
|
this.addKeybinding('pause-resume-tweens',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.ALL,
|
Shell.KeyBindingMode.ALL,
|
||||||
Lang.bind(this, this._toggleTweens));
|
Lang.bind(this, this._toggleTweens));
|
||||||
|
|
||||||
this.addKeybinding('open-application-menu',
|
this.addKeybinding('open-application-menu',
|
||||||
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
|
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
|
||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.NORMAL |
|
Shell.KeyBindingMode.NORMAL |
|
||||||
Shell.KeyBindingMode.TOPBAR_POPUP,
|
Shell.KeyBindingMode.TOPBAR_POPUP,
|
||||||
@ -669,11 +678,60 @@ const WindowManager = new Lang.Class({
|
|||||||
this._dimWindow(this._dimmedWindows[i]);
|
this._dimWindow(this._dimmedWindows[i]);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
this._windowMenuManager = new WindowMenu.WindowMenuManager();
|
||||||
|
|
||||||
if (Main.sessionMode.hasWorkspaces)
|
if (Main.sessionMode.hasWorkspaces)
|
||||||
this._workspaceTracker = new WorkspaceTracker(this);
|
this._workspaceTracker = new WorkspaceTracker(this);
|
||||||
|
|
||||||
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
|
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
|
||||||
false, -1, 1);
|
false, -1, 1);
|
||||||
|
|
||||||
|
let gesture = new WorkspaceSwitchAction.WorkspaceSwitchAction();
|
||||||
|
gesture.connect('activated', Lang.bind(this, function(action, direction) {
|
||||||
|
let newWs = global.screen.get_active_workspace().get_neighbor(direction);
|
||||||
|
this.actionMoveWorkspace(newWs);
|
||||||
|
}));
|
||||||
|
global.stage.add_action(gesture);
|
||||||
|
|
||||||
|
gesture = new AppSwitchAction.AppSwitchAction();
|
||||||
|
gesture.connect('activated', Lang.bind(this, this._switchApp));
|
||||||
|
global.stage.add_action(gesture);
|
||||||
|
},
|
||||||
|
|
||||||
|
_lookupIndex: function (windows, metaWindow) {
|
||||||
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
if (windows[i].metaWindow == metaWindow) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
},
|
||||||
|
|
||||||
|
_switchApp : function () {
|
||||||
|
let windows = global.get_window_actors().filter(Lang.bind(this, function(actor) {
|
||||||
|
let win = actor.metaWindow;
|
||||||
|
return (!win.is_override_redirect() &&
|
||||||
|
win.located_on_workspace(global.screen.get_active_workspace()));
|
||||||
|
}));
|
||||||
|
|
||||||
|
if (windows.length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let focusWindow = global.display.focus_window;
|
||||||
|
let nextWindow;
|
||||||
|
|
||||||
|
if (focusWindow == null)
|
||||||
|
nextWindow = windows[0].metaWindow;
|
||||||
|
else {
|
||||||
|
let index = this._lookupIndex (windows, focusWindow) + 1;
|
||||||
|
|
||||||
|
if (index >= windows.length)
|
||||||
|
index = 0;
|
||||||
|
|
||||||
|
nextWindow = windows[index].metaWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.activateWindow(nextWindow);
|
||||||
},
|
},
|
||||||
|
|
||||||
keepWorkspaceAlive: function(workspace, duration) {
|
keepWorkspaceAlive: function(workspace, duration) {
|
||||||
@ -704,16 +762,8 @@ const WindowManager = new Lang.Class({
|
|||||||
this._allowedKeybindings[name] = modes;
|
this._allowedKeybindings[name] = modes;
|
||||||
},
|
},
|
||||||
|
|
||||||
blockAnimations: function() {
|
|
||||||
this._animationBlockCount++;
|
|
||||||
},
|
|
||||||
|
|
||||||
unblockAnimations: function() {
|
|
||||||
this._animationBlockCount = Math.max(0, this._animationBlockCount - 1);
|
|
||||||
},
|
|
||||||
|
|
||||||
_shouldAnimate: function() {
|
_shouldAnimate: function() {
|
||||||
return !(Main.overview.visible || this._animationBlockCount > 0);
|
return !Main.overview.visible;
|
||||||
},
|
},
|
||||||
|
|
||||||
_shouldAnimateActor: function(actor) {
|
_shouldAnimateActor: function(actor) {
|
||||||
@ -902,7 +952,7 @@ const WindowManager = new Lang.Class({
|
|||||||
/* Scale the window from the center of the parent */
|
/* Scale the window from the center of the parent */
|
||||||
this._checkDimming(actor.get_meta_window().get_transient_for());
|
this._checkDimming(actor.get_meta_window().get_transient_for());
|
||||||
actor.set_scale(1.0, 0.0);
|
actor.set_scale(1.0, 0.0);
|
||||||
actor.scale_gravity = Clutter.Gravity.CENTER;
|
actor.set_pivot_point(0.5, 0.5);
|
||||||
actor.show();
|
actor.show();
|
||||||
this._mapping.push(actor);
|
this._mapping.push(actor);
|
||||||
|
|
||||||
@ -976,7 +1026,7 @@ const WindowManager = new Lang.Class({
|
|||||||
this._checkDimming(parent, window);
|
this._checkDimming(parent, window);
|
||||||
|
|
||||||
actor.set_scale(1.0, 1.0);
|
actor.set_scale(1.0, 1.0);
|
||||||
actor.scale_gravity = Clutter.Gravity.CENTER;
|
actor.set_pivot_point(0.5, 0.5);
|
||||||
actor.show();
|
actor.show();
|
||||||
|
|
||||||
actor._parentDestroyId = parent.connect('unmanaged', Lang.bind(this, function () {
|
actor._parentDestroyId = parent.connect('unmanaged', Lang.bind(this, function () {
|
||||||
@ -1159,6 +1209,10 @@ const WindowManager = new Lang.Class({
|
|||||||
this._tilePreview.hide();
|
this._tilePreview.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_showWindowMenu: function(shellwm, window, menu, rect) {
|
||||||
|
this._windowMenuManager.showWindowMenuForWindow(window, menu, rect);
|
||||||
|
},
|
||||||
|
|
||||||
_startAppSwitcher : function(display, screen, window, binding) {
|
_startAppSwitcher : function(display, screen, window, binding) {
|
||||||
/* prevent a corner case where both popups show up at once */
|
/* prevent a corner case where both popups show up at once */
|
||||||
if (this._workspaceSwitcherPopup != null)
|
if (this._workspaceSwitcherPopup != null)
|
||||||
|
185
js/ui/windowMenu.js
Normal file
185
js/ui/windowMenu.js
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*
|
||||||
|
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const RemoteMenu = imports.ui.remoteMenu;
|
||||||
|
|
||||||
|
const WindowMenu = new Lang.Class({
|
||||||
|
Name: 'WindowMenu',
|
||||||
|
Extends: PopupMenu.PopupMenu,
|
||||||
|
|
||||||
|
_init: function(window, sourceActor) {
|
||||||
|
this.parent(sourceActor, 0, St.Side.TOP);
|
||||||
|
|
||||||
|
this.actor.add_style_class_name('window-menu');
|
||||||
|
|
||||||
|
Main.layoutManager.uiGroup.add_actor(this.actor);
|
||||||
|
this.actor.hide();
|
||||||
|
|
||||||
|
this._buildMenu(window);
|
||||||
|
},
|
||||||
|
|
||||||
|
_buildMenu: function(window) {
|
||||||
|
let type = window.get_window_type();
|
||||||
|
|
||||||
|
let item;
|
||||||
|
|
||||||
|
item = this.addAction(_("Minimize"), Lang.bind(this, function(event) {
|
||||||
|
window.minimize();
|
||||||
|
}));
|
||||||
|
if (!window.can_minimize())
|
||||||
|
item.setSensitive(false);
|
||||||
|
|
||||||
|
if (window.get_maximized()) {
|
||||||
|
item = this.addAction(_("Unmaximize"), Lang.bind(this, function() {
|
||||||
|
window.unmaximize(Meta.MaximizeFlags.BOTH);
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
item = this.addAction(_("Maximize"), Lang.bind(this, function() {
|
||||||
|
window.maximize(Meta.MaximizeFlags.BOTH);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
if (!window.can_maximize())
|
||||||
|
item.setSensitive(false);
|
||||||
|
|
||||||
|
item = this.addAction(_("Move"), Lang.bind(this, function(event) {
|
||||||
|
window.begin_grab_op(Meta.GrabOp.KEYBOARD_MOVING, true, event.get_time());
|
||||||
|
}));
|
||||||
|
if (!window.allows_move())
|
||||||
|
item.setSensitive(false);
|
||||||
|
|
||||||
|
item = this.addAction(_("Resize"), Lang.bind(this, function(event) {
|
||||||
|
window.begin_grab_op(Meta.GrabOp.KEYBOARD_RESIZING_UNKNOWN, true, event.get_time());
|
||||||
|
}));
|
||||||
|
if (!window.allows_resize())
|
||||||
|
item.setSensitive(false);
|
||||||
|
|
||||||
|
if (!window.titlebar_is_onscreen() && type != Meta.WindowType.DOCK && type != Meta.WindowType.DESKTOP) {
|
||||||
|
this.addAction(_("Move Titlebar Onscreen"), Lang.bind(this, function(event) {
|
||||||
|
window.shove_titlebar_onscreen();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
item = this.addAction(_("Always on Top"), Lang.bind(this, function() {
|
||||||
|
if (window.is_above())
|
||||||
|
window.unmake_above();
|
||||||
|
else
|
||||||
|
window.make_above();
|
||||||
|
}));
|
||||||
|
if (window.is_above())
|
||||||
|
item.setOrnament(PopupMenu.Ornament.DOT);
|
||||||
|
if (window.get_maximized() ||
|
||||||
|
type == Meta.WindowType.DOCK ||
|
||||||
|
type == Meta.WindowType.DESKTOP ||
|
||||||
|
type == Meta.WindowType.SPLASHSCREEN)
|
||||||
|
item.setSensitive(false);
|
||||||
|
|
||||||
|
if (Main.sessionMode.hasWorkspaces &&
|
||||||
|
(!Meta.prefs_get_workspaces_only_on_primary() ||
|
||||||
|
window.is_on_primary_monitor())) {
|
||||||
|
let isSticky = window.is_on_all_workspaces();
|
||||||
|
|
||||||
|
item = this.addAction(_("Always on Visible Workspace"), Lang.bind(this, function() {
|
||||||
|
if (isSticky)
|
||||||
|
window.unstick();
|
||||||
|
else
|
||||||
|
window.stick();
|
||||||
|
}));
|
||||||
|
if (isSticky)
|
||||||
|
item.setOrnament(PopupMenu.Ornament.DOT);
|
||||||
|
if (window.is_always_on_all_workspaces())
|
||||||
|
item.setSensitive(false);
|
||||||
|
|
||||||
|
let nWorkspaces = global.screen.n_workspaces;
|
||||||
|
|
||||||
|
if (!isSticky) {
|
||||||
|
let workspace = window.get_workspace();
|
||||||
|
let idx = workspace.index();
|
||||||
|
if (idx > 0) {
|
||||||
|
this.addAction(_("Move to Workspace Up"), Lang.bind(this, function(event) {
|
||||||
|
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.UP));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
if (idx < nWorkspaces) {
|
||||||
|
this.addAction(_("Move to Workspace Down"), Lang.bind(this, function(event) {
|
||||||
|
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.DOWN));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
|
item = this.addAction(_("Close"), Lang.bind(this, function(event) {
|
||||||
|
window.delete(event.get_time());
|
||||||
|
}));
|
||||||
|
if (!window.can_close())
|
||||||
|
item.setSensitive(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const AppMenu = new Lang.Class({
|
||||||
|
Name: 'AppMenu',
|
||||||
|
Extends: RemoteMenu.RemoteMenu,
|
||||||
|
|
||||||
|
_init: function(window, sourceActor) {
|
||||||
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||||||
|
|
||||||
|
this.parent(sourceActor, app.menu, app.action_group);
|
||||||
|
|
||||||
|
this.actor.add_style_class_name('fallback-app-menu');
|
||||||
|
let variant = window.get_gtk_theme_variant();
|
||||||
|
if (variant)
|
||||||
|
this.actor.add_style_class_name(variant);
|
||||||
|
|
||||||
|
Main.layoutManager.uiGroup.add_actor(this.actor);
|
||||||
|
this.actor.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const WindowMenuManager = new Lang.Class({
|
||||||
|
Name: 'WindowMenuManager',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
|
||||||
|
|
||||||
|
this._sourceActor = new St.Widget({ reactive: true, visible: false });
|
||||||
|
this._sourceActor.connect('button-press-event', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._manager.activeMenu.toggle();
|
||||||
|
}));
|
||||||
|
Main.uiGroup.add_actor(this._sourceActor);
|
||||||
|
},
|
||||||
|
|
||||||
|
showWindowMenuForWindow: function(window, type, rect) {
|
||||||
|
let menuType = (type == Meta.WindowMenuType.WM) ? WindowMenu : AppMenu;
|
||||||
|
let menu = new menuType(window, this._sourceActor);
|
||||||
|
|
||||||
|
this._manager.addMenu(menu);
|
||||||
|
|
||||||
|
menu.connect('activate', function() {
|
||||||
|
window.check_alive(global.get_current_time());
|
||||||
|
});
|
||||||
|
|
||||||
|
this._sourceActor.set_size(rect.width, rect.height);
|
||||||
|
this._sourceActor.set_position(rect.x, rect.y);
|
||||||
|
this._sourceActor.show();
|
||||||
|
|
||||||
|
menu.open(BoxPointer.PopupAnimation.NONE);
|
||||||
|
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
menu.connect('open-state-changed', Lang.bind(this, function(menu_, isOpen) {
|
||||||
|
if (isOpen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._sourceActor.hide();
|
||||||
|
menu.destroy();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
@ -67,7 +67,7 @@ const WindowCloneLayout = new Lang.Class({
|
|||||||
// paradoxically is the smaller rectangle, containing the positions
|
// paradoxically is the smaller rectangle, containing the positions
|
||||||
// of the visible frame. The input rect contains everything,
|
// of the visible frame. The input rect contains everything,
|
||||||
// including the invisible border padding.
|
// including the invisible border padding.
|
||||||
let inputRect = window.get_input_rect();
|
let inputRect = window.get_buffer_rect();
|
||||||
|
|
||||||
let box = new Clutter.ActorBox();
|
let box = new Clutter.ActorBox();
|
||||||
|
|
||||||
@ -200,6 +200,10 @@ const WindowClone = new Lang.Class({
|
|||||||
this.emit('size-changed');
|
this.emit('size-changed');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
hasAttachedDialogs: function() {
|
||||||
|
return this.actor.get_n_children() > 1;
|
||||||
|
},
|
||||||
|
|
||||||
_doAddAttachedDialog: function(metaWin, realWin) {
|
_doAddAttachedDialog: function(metaWin, realWin) {
|
||||||
let clone = new Clutter.Clone({ source: realWin });
|
let clone = new Clutter.Clone({ source: realWin });
|
||||||
clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() {
|
clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() {
|
||||||
@ -235,6 +239,14 @@ const WindowClone = new Lang.Class({
|
|||||||
return this._boundingBox;
|
return this._boundingBox;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get width() {
|
||||||
|
return this._boundingBox.width;
|
||||||
|
},
|
||||||
|
|
||||||
|
get height() {
|
||||||
|
return this._boundingBox.height;
|
||||||
|
},
|
||||||
|
|
||||||
getOriginalPosition: function() {
|
getOriginalPosition: function() {
|
||||||
return [this._boundingBox.x, this._boundingBox.y];
|
return [this._boundingBox.x, this._boundingBox.y];
|
||||||
},
|
},
|
||||||
@ -253,7 +265,8 @@ const WindowClone = new Lang.Class({
|
|||||||
rect = rect.union(metaWindow.get_outer_rect());
|
rect = rect.union(metaWindow.get_outer_rect());
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this._boundingBox = rect;
|
// Convert from a MetaRectangle to a native JS object
|
||||||
|
this._boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };
|
||||||
this.actor.layout_manager.boundingBox = rect;
|
this.actor.layout_manager.boundingBox = rect;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -582,7 +595,8 @@ const WindowOverlay = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_windowCanClose: function() {
|
_windowCanClose: function() {
|
||||||
return this._windowClone.metaWindow.can_close();
|
return this._windowClone.metaWindow.can_close() &&
|
||||||
|
!this._windowClone.hasAttachedDialogs();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onWindowAdded: function(workspace, win) {
|
_onWindowAdded: function(workspace, win) {
|
||||||
@ -827,7 +841,7 @@ const LayoutStrategy = new Lang.Class({
|
|||||||
// thumbnails is much more important to preserve than the width of
|
// thumbnails is much more important to preserve than the width of
|
||||||
// them, so two windows with equal height, but maybe differering
|
// them, so two windows with equal height, but maybe differering
|
||||||
// widths line up.
|
// widths line up.
|
||||||
let ratio = window.actor.height / this._monitor.height;
|
let ratio = window.height / this._monitor.height;
|
||||||
|
|
||||||
// The purpose of this manipulation here is to prevent windows
|
// The purpose of this manipulation here is to prevent windows
|
||||||
// from getting too small. For something like a calculator window,
|
// from getting too small. For something like a calculator window,
|
||||||
@ -929,11 +943,11 @@ const LayoutStrategy = new Lang.Class({
|
|||||||
let window = row.windows[j];
|
let window = row.windows[j];
|
||||||
|
|
||||||
let s = scale * this._computeWindowScale(window) * row.additionalScale;
|
let s = scale * this._computeWindowScale(window) * row.additionalScale;
|
||||||
let cellWidth = window.actor.width * s;
|
let cellWidth = window.width * s;
|
||||||
let cellHeight = window.actor.height * s;
|
let cellHeight = window.height * s;
|
||||||
|
|
||||||
s = Math.min(s, WINDOW_CLONE_MAXIMUM_SCALE);
|
s = Math.min(s, WINDOW_CLONE_MAXIMUM_SCALE);
|
||||||
let cloneWidth = window.actor.width * s;
|
let cloneWidth = window.width * s;
|
||||||
|
|
||||||
let cloneX = x + (cellWidth - cloneWidth) / 2;
|
let cloneX = x + (cellWidth - cloneWidth) / 2;
|
||||||
let cloneY = row.y + row.height - cellHeight;
|
let cloneY = row.y + row.height - cellHeight;
|
||||||
@ -987,7 +1001,7 @@ const UnalignedLayoutStrategy = new Lang.Class({
|
|||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
let window = windows[i];
|
let window = windows[i];
|
||||||
let s = this._computeWindowScale(window);
|
let s = this._computeWindowScale(window);
|
||||||
totalWidth += window.actor.width * s;
|
totalWidth += window.width * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
let idealRowWidth = totalWidth / numRows;
|
let idealRowWidth = totalWidth / numRows;
|
||||||
@ -1000,8 +1014,8 @@ const UnalignedLayoutStrategy = new Lang.Class({
|
|||||||
for (; windowIdx < windows.length; windowIdx++) {
|
for (; windowIdx < windows.length; windowIdx++) {
|
||||||
let window = windows[windowIdx];
|
let window = windows[windowIdx];
|
||||||
let s = this._computeWindowScale(window);
|
let s = this._computeWindowScale(window);
|
||||||
let width = window.actor.width * s;
|
let width = window.width * s;
|
||||||
let height = window.actor.height * s;
|
let height = window.height * s;
|
||||||
row.fullHeight = Math.max(row.fullHeight, height);
|
row.fullHeight = Math.max(row.fullHeight, height);
|
||||||
|
|
||||||
// either new width is < idealWidth or new width is nearer from idealWidth then oldWidth
|
// either new width is < idealWidth or new width is nearer from idealWidth then oldWidth
|
||||||
@ -1126,6 +1140,11 @@ const Workspace = new Lang.Class({
|
|||||||
|
|
||||||
this._positionWindowsFlags = 0;
|
this._positionWindowsFlags = 0;
|
||||||
this._positionWindowsId = 0;
|
this._positionWindowsId = 0;
|
||||||
|
|
||||||
|
this.actor.connect('notify::mapped', Lang.bind(this, function() {
|
||||||
|
if (this.actor.mapped)
|
||||||
|
this._syncActualGeometry();
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
setFullGeometry: function(geom) {
|
setFullGeometry: function(geom) {
|
||||||
@ -1133,7 +1152,9 @@ const Workspace = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._fullGeometry = geom;
|
this._fullGeometry = geom;
|
||||||
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
|
||||||
|
if (this.actor.mapped)
|
||||||
|
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
||||||
},
|
},
|
||||||
|
|
||||||
setActualGeometry: function(geom) {
|
setActualGeometry: function(geom) {
|
||||||
@ -1141,18 +1162,29 @@ const Workspace = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._actualGeometry = geom;
|
this._actualGeometry = geom;
|
||||||
|
this._actualGeometryDirty = true;
|
||||||
|
|
||||||
if (this._actualGeometryLater)
|
if (this.actor.mapped)
|
||||||
|
this._syncActualGeometry();
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncActualGeometry: function() {
|
||||||
|
if (this._actualGeometryLater || !this._actualGeometryDirty)
|
||||||
|
return;
|
||||||
|
if (!this._actualGeometry)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._actualGeometryLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
|
this._actualGeometryLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
|
||||||
|
this._actualGeometryLater = 0;
|
||||||
|
if (!this.actor.mapped)
|
||||||
|
return false;
|
||||||
|
|
||||||
let geom = this._actualGeometry;
|
let geom = this._actualGeometry;
|
||||||
|
|
||||||
this._dropRect.set_position(geom.x, geom.y);
|
this._dropRect.set_position(geom.x, geom.y);
|
||||||
this._dropRect.set_size(geom.width, geom.height);
|
this._dropRect.set_size(geom.width, geom.height);
|
||||||
this._updateWindowPositions(Main.overview.animationInProgress ? WindowPositionFlags.ANIMATE : WindowPositionFlags.NONE);
|
this._updateWindowPositions(Main.overview.animationInProgress ? WindowPositionFlags.ANIMATE : WindowPositionFlags.NONE);
|
||||||
|
|
||||||
this._actualGeometryLater = 0;
|
|
||||||
return false;
|
return false;
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
52
js/ui/workspaceSwitchAction.js
Normal file
52
js/ui/workspaceSwitchAction.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
|
||||||
|
let MOTION_THRESHOLD = 50;
|
||||||
|
|
||||||
|
const WorkspaceSwitchAction = new Lang.Class({
|
||||||
|
Name: 'WorkspaceSwitchAction',
|
||||||
|
Extends: Clutter.GestureAction,
|
||||||
|
|
||||||
|
_init : function() {
|
||||||
|
this.parent();
|
||||||
|
this.set_n_touch_points (4);
|
||||||
|
global.display.connect('grab-op-begin', Lang.bind(this, this.cancel));
|
||||||
|
global.display.connect('grab-op-end', Lang.bind(this, this.cancel));
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
|
return this.get_n_current_points() == this.get_n_touch_points();
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_end : function(action, actor) {
|
||||||
|
// Just check one touchpoint here
|
||||||
|
let [startX, startY] = this.get_press_coords(0);
|
||||||
|
let [x, y] = this.get_motion_coords(0);
|
||||||
|
let offsetX = x - startX;
|
||||||
|
let offsetY = y - startY;
|
||||||
|
let direction;
|
||||||
|
|
||||||
|
if (Math.abs(offsetX) < MOTION_THRESHOLD &&
|
||||||
|
Math.abs(offsetY) < MOTION_THRESHOLD)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Math.abs(offsetY) > Math.abs(offsetX)) {
|
||||||
|
if (offsetY > 0)
|
||||||
|
direction = Meta.MotionDirection.UP;
|
||||||
|
else
|
||||||
|
direction = Meta.MotionDirection.DOWN;
|
||||||
|
} else {
|
||||||
|
if (offsetX > 0)
|
||||||
|
direction = Meta.MotionDirection.LEFT;
|
||||||
|
else
|
||||||
|
direction = Meta.MotionDirection.RIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.emit('activated', direction);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(WorkspaceSwitchAction.prototype);
|
@ -665,7 +665,7 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
Main.overview.connect('window-drag-cancelled',
|
Main.overview.connect('window-drag-cancelled',
|
||||||
Lang.bind(this, this._onDragCancelled));
|
Lang.bind(this, this._onDragCancelled));
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
|
||||||
this._settings.connect('changed::dynamic-workspaces',
|
this._settings.connect('changed::dynamic-workspaces',
|
||||||
Lang.bind(this, this._updateSwitcherVisibility));
|
Lang.bind(this, this._updateSwitcherVisibility));
|
||||||
},
|
},
|
||||||
@ -826,10 +826,14 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
window.change_workspace_by_index(window.get_workspace().index() + 1, true);
|
window.change_workspace_by_index(window.get_workspace().index() + 1, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isWindow)
|
if (isWindow) {
|
||||||
// ... and bam, a workspace, good as new.
|
// ... and bam, a workspace, good as new.
|
||||||
|
// Move the window to our monitor first if necessary.
|
||||||
|
let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex;
|
||||||
|
if (source.metaWindow.get_monitor() != thumbMonitor)
|
||||||
|
source.metaWindow.move_to_monitor(thumbMonitor);
|
||||||
source.metaWindow.change_workspace_by_index(newWorkspaceIndex, true);
|
source.metaWindow.change_workspace_by_index(newWorkspaceIndex, true);
|
||||||
else if (source.shellWorkspaceLaunch) {
|
} else if (source.shellWorkspaceLaunch) {
|
||||||
source.shellWorkspaceLaunch({ workspace: newWorkspaceIndex,
|
source.shellWorkspaceLaunch({ workspace: newWorkspaceIndex,
|
||||||
timestamp: time });
|
timestamp: time });
|
||||||
// This new workspace will be automatically removed if the application fails
|
// This new workspace will be automatically removed if the application fails
|
||||||
|
@ -74,12 +74,12 @@ const WorkspacesViewBase = new Lang.Class({
|
|||||||
|
|
||||||
setFullGeometry: function(geom) {
|
setFullGeometry: function(geom) {
|
||||||
this._fullGeometry = geom;
|
this._fullGeometry = geom;
|
||||||
this._syncGeometry();
|
this._syncFullGeometry();
|
||||||
},
|
},
|
||||||
|
|
||||||
setActualGeometry: function(geom) {
|
setActualGeometry: function(geom) {
|
||||||
this._actualGeometry = geom;
|
this._actualGeometry = geom;
|
||||||
this._syncGeometry();
|
this._syncActualGeometry();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ const WorkspacesView = new Lang.Class({
|
|||||||
this._scrolling = false; // swipe-scrolling
|
this._scrolling = false; // swipe-scrolling
|
||||||
this._animatingScroll = false; // programatically updating the adjustment
|
this._animatingScroll = false; // programatically updating the adjustment
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
|
||||||
|
|
||||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||||
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
||||||
@ -127,9 +127,12 @@ const WorkspacesView = new Lang.Class({
|
|||||||
this._workspaces[i].setReservedSlot(clone);
|
this._workspaces[i].setReservedSlot(clone);
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncGeometry: function() {
|
_syncFullGeometry: function() {
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].setFullGeometry(this._fullGeometry);
|
this._workspaces[i].setFullGeometry(this._fullGeometry);
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncActualGeometry: function() {
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].setActualGeometry(this._actualGeometry);
|
this._workspaces[i].setActualGeometry(this._actualGeometry);
|
||||||
},
|
},
|
||||||
@ -260,10 +263,12 @@ const WorkspacesView = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._fullGeometry)
|
if (this._fullGeometry) {
|
||||||
this._updateWorkspaceActors(false);
|
this._updateWorkspaceActors(false);
|
||||||
|
this._syncFullGeometry();
|
||||||
this._syncGeometry();
|
}
|
||||||
|
if (this._actualGeometry)
|
||||||
|
this._syncActualGeometry();
|
||||||
},
|
},
|
||||||
|
|
||||||
_activeWorkspaceChanged: function(wm, from, to, direction) {
|
_activeWorkspaceChanged: function(wm, from, to, direction) {
|
||||||
@ -352,8 +357,11 @@ const ExtraWorkspaceView = new Lang.Class({
|
|||||||
this._workspace.setReservedSlot(clone);
|
this._workspace.setReservedSlot(clone);
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncGeometry: function() {
|
_syncFullGeometry: function() {
|
||||||
this._workspace.setFullGeometry(this._fullGeometry);
|
this._workspace.setFullGeometry(this._fullGeometry);
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncActualGeometry: function() {
|
||||||
this._workspace.setActualGeometry(this._actualGeometry);
|
this._workspace.setActualGeometry(this._actualGeometry);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -429,7 +437,7 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
this._workspacesViews = [];
|
this._workspacesViews = [];
|
||||||
this._primaryScrollAdjustment = null;
|
this._primaryScrollAdjustment = null;
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
|
||||||
this._settings.connect('changed::workspaces-only-on-primary',
|
this._settings.connect('changed::workspaces-only-on-primary',
|
||||||
Lang.bind(this,
|
Lang.bind(this,
|
||||||
this._workspacesOnlyOnPrimaryChanged));
|
this._workspacesOnlyOnPrimaryChanged));
|
||||||
@ -598,8 +606,9 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
let [x, y] = this.actor.get_transformed_position();
|
let [x, y] = this.actor.get_transformed_position();
|
||||||
let width = this.actor.allocation.x2 - this.actor.allocation.x1;
|
let allocation = this.actor.allocation;
|
||||||
let height = this.actor.allocation.y2 - this.actor.allocation.y1;
|
let width = allocation.x2 - allocation.x1;
|
||||||
|
let height = allocation.y2 - allocation.y1;
|
||||||
let primaryGeometry = { x: x, y: y, width: width, height: height };
|
let primaryGeometry = { x: x, y: y, width: width, height: height };
|
||||||
|
|
||||||
let monitors = Main.layoutManager.monitors;
|
let monitors = Main.layoutManager.monitors;
|
||||||
|
@ -6,11 +6,13 @@ data/gnome-shell.desktop.in.in
|
|||||||
data/gnome-shell-extension-prefs.desktop.in.in
|
data/gnome-shell-extension-prefs.desktop.in.in
|
||||||
data/gnome-shell-wayland.desktop.in.in
|
data/gnome-shell-wayland.desktop.in.in
|
||||||
data/org.gnome.shell.gschema.xml.in.in
|
data/org.gnome.shell.gschema.xml.in.in
|
||||||
|
data/org.gnome.Shell.PortalHelper.desktop.in
|
||||||
js/extensionPrefs/main.js
|
js/extensionPrefs/main.js
|
||||||
js/gdm/authPrompt.js
|
js/gdm/authPrompt.js
|
||||||
js/gdm/loginDialog.js
|
js/gdm/loginDialog.js
|
||||||
js/gdm/util.js
|
js/gdm/util.js
|
||||||
js/misc/util.js
|
js/misc/util.js
|
||||||
|
js/portalHelper/main.js
|
||||||
js/ui/appDisplay.js
|
js/ui/appDisplay.js
|
||||||
js/ui/appFavorites.js
|
js/ui/appFavorites.js
|
||||||
js/ui/backgroundMenu.js
|
js/ui/backgroundMenu.js
|
||||||
@ -55,6 +57,7 @@ js/ui/unlockDialog.js
|
|||||||
js/ui/viewSelector.js
|
js/ui/viewSelector.js
|
||||||
js/ui/windowAttentionHandler.js
|
js/ui/windowAttentionHandler.js
|
||||||
js/ui/windowManager.js
|
js/ui/windowManager.js
|
||||||
|
js/ui/windowMenu.js
|
||||||
src/calendar-server/evolution-calendar.desktop.in.in
|
src/calendar-server/evolution-calendar.desktop.in.in
|
||||||
# Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it.
|
# Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it.
|
||||||
src/gvc/gvc-mixer-control.c
|
src/gvc/gvc-mixer-control.c
|
||||||
|
316
po/be.po
316
po/be.po
@ -5,7 +5,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell.master\n"
|
"Project-Id-Version: gnome-shell.master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2014-02-22 08:29+0000\n"
|
"POT-Creation-Date: 2014-04-30 19:59+0000\n"
|
||||||
"PO-Revision-Date: 2012-10-16 12:05+0300\n"
|
"PO-Revision-Date: 2012-10-16 12:05+0300\n"
|
||||||
"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n"
|
"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n"
|
||||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||||
@ -107,8 +107,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Абалонка GNOME запусціць толькі тыя пашырэнні, аўтары якіх сцвярджаюць, што "
|
"Абалонка GNOME запусціць толькі тыя пашырэнні, аўтары якіх сцвярджаюць, што "
|
||||||
"яны працуюць з бягучай версіяй абалонкі. Уключэнне гэтай настройкі выключыць "
|
"яны працуюць з бягучай версіяй абалонкі. Уключэнне гэтай настройкі выключыць "
|
||||||
"гэту праверку, і для ўсіх пашырэнняў будзе ажыццёўлена спроба загрузкі незалежна ад "
|
"гэту праверку, і для ўсіх пашырэнняў будзе ажыццёўлена спроба загрузкі "
|
||||||
"сцвярджэнняў іх аўтараў."
|
"незалежна ад сцвярджэнняў іх аўтараў."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
@ -228,10 +228,17 @@ msgid ""
|
|||||||
"Configures the maximum level of location accuracy applications are allowed "
|
"Configures the maximum level of location accuracy applications are allowed "
|
||||||
"to see. Valid options are 'off' (disable location tracking), 'country', "
|
"to see. Valid options are 'off' (disable location tracking), 'country', "
|
||||||
"'city', 'neighborhood', 'street', and 'exact' (typically requires GPS "
|
"'city', 'neighborhood', 'street', and 'exact' (typically requires GPS "
|
||||||
"receiver). Please keep in mind that this only controls what Geoclue will "
|
"receiver). Please keep in mind that this only controls what GeoClue will "
|
||||||
"allow applications to see and they can find user's location on their own "
|
"allow applications to see and they can find user's location on their own "
|
||||||
"using network resources (albeit with street-level accuracy at best)."
|
"using network resources (albeit with street-level accuracy at best)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Настройка максімальнай дакладнасці вызначэння месцапалажэння, даступнай праграмам. "
|
||||||
|
"Магчымыя значэнні: \"off\" (выключыць вызначэнне месцапалажэння), \"country\" (краіна), "
|
||||||
|
"\"city\" (горад), \"neighborhood\" (раён), \"street\" (вуліца) і \"exact\" (дэталёва, "
|
||||||
|
"звычайна патрабуе GPS-прыёмнік). Увага: гэта настройка вызначае толькі тое, што "
|
||||||
|
"даступна праграмам з дапамогай службы GeoClue, але яны могуць самастойна вызначаць "
|
||||||
|
"месцапалажэнне з дапамогай спецыяльных сеціўных рэсурсаў (праўда, максімальная дакладнасць "
|
||||||
|
"такіх рэсурсаў - назва вуліцы)."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "The application icon mode."
|
msgid "The application icon mode."
|
||||||
@ -288,7 +295,8 @@ msgstr ""
|
|||||||
#: ../js/extensionPrefs/main.js:127
|
#: ../js/extensionPrefs/main.js:127
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr "Падчас спробы загрузкі дыялогавага акенца настроек для %s адбылася памылка:"
|
msgstr ""
|
||||||
|
"Падчас спробы загрузкі дыялогавага акенца настроек для %s адбылася памылка:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:167
|
#: ../js/extensionPrefs/main.js:167
|
||||||
msgid "Extension"
|
msgid "Extension"
|
||||||
@ -303,7 +311,7 @@ msgstr ""
|
|||||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
||||||
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||||
#: ../js/ui/status/network.js:883
|
#: ../js/ui/status/network.js:878
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Скасаваць"
|
msgstr "Скасаваць"
|
||||||
|
|
||||||
@ -321,25 +329,25 @@ msgctxt "button"
|
|||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Увайсці"
|
msgstr "Увайсці"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:270
|
#: ../js/gdm/loginDialog.js:271
|
||||||
msgid "Choose Session"
|
msgid "Choose Session"
|
||||||
msgstr "Выбар сеанса"
|
msgstr "Выбар сеанса"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:430
|
#: ../js/gdm/loginDialog.js:431
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Няма ў спісе?"
|
msgstr "Няма ў спісе?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:598
|
#: ../js/gdm/loginDialog.js:614
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(напр., карыстальнік ці %s)"
|
msgstr "(напр., карыстальнік ці %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:603 ../js/ui/components/networkAgent.js:262
|
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
|
||||||
#: ../js/ui/components/networkAgent.js:280
|
#: ../js/ui/components/networkAgent.js:280
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Імя карыстальніка: "
|
msgstr "Імя карыстальніка: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:868
|
#: ../js/gdm/loginDialog.js:920
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Акно ўваходу"
|
msgstr "Акно ўваходу"
|
||||||
|
|
||||||
@ -364,27 +372,27 @@ msgstr "Не ўдалося разабраць загад:"
|
|||||||
msgid "Execution of “%s” failed:"
|
msgid "Execution of “%s” failed:"
|
||||||
msgstr "Не ўдалося выканаць \"%s\":"
|
msgstr "Не ўдалося выканаць \"%s\":"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:629
|
#: ../js/ui/appDisplay.js:636
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
msgstr "Тут размешчаныя часта ўжываныя праграмы"
|
msgstr "Тут размешчаныя часта ўжываныя праграмы"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:740
|
#: ../js/ui/appDisplay.js:747
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Часта"
|
msgstr "Часта"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:747
|
#: ../js/ui/appDisplay.js:754
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Усе"
|
msgstr "Усе"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1552
|
#: ../js/ui/appDisplay.js:1566
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Новае акно"
|
msgstr "Новае акно"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1574 ../js/ui/dash.js:285
|
#: ../js/ui/appDisplay.js:1588 ../js/ui/dash.js:285
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Выдаліць са спіса ўпадабанага"
|
msgstr "Выдаліць са спіса ўпадабанага"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1580
|
#: ../js/ui/appDisplay.js:1594
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Дадаць у спіс упадабанага"
|
msgstr "Дадаць у спіс упадабанага"
|
||||||
|
|
||||||
@ -527,44 +535,44 @@ msgstr "Сб"
|
|||||||
msgid "calendar:MY"
|
msgid "calendar:MY"
|
||||||
msgstr "calendar:MY"
|
msgstr "calendar:MY"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:446
|
#: ../js/ui/calendar.js:450
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Папярэдні месяц"
|
msgstr "Папярэдні месяц"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:456
|
#: ../js/ui/calendar.js:460
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Наступны месяц"
|
msgstr "Наступны месяц"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events */
|
#. Translators: Text to show if there are no events */
|
||||||
#: ../js/ui/calendar.js:762
|
#: ../js/ui/calendar.js:772
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Нічога не прымеркавана"
|
msgstr "Нічога не прымеркавана"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
||||||
#: ../js/ui/calendar.js:780
|
#: ../js/ui/calendar.js:790
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d %B"
|
msgstr "%A, %d %B"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
||||||
#: ../js/ui/calendar.js:783
|
#: ../js/ui/calendar.js:793
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %d %B, %Y"
|
msgstr "%A, %d %B, %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:794
|
#: ../js/ui/calendar.js:804
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Сёння"
|
msgstr "Сёння"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:798
|
#: ../js/ui/calendar.js:808
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Заўтра"
|
msgstr "Заўтра"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:809
|
#: ../js/ui/calendar.js:819
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "На гэтым тыдні"
|
msgstr "На гэтым тыдні"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:817
|
#: ../js/ui/calendar.js:827
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "На наступным тыдні"
|
msgstr "На наступным тыдні"
|
||||||
|
|
||||||
@ -597,8 +605,8 @@ msgstr "Пароль:"
|
|||||||
msgid "Type again:"
|
msgid "Type again:"
|
||||||
msgstr "Паўтарыце пароль:"
|
msgstr "Паўтарыце пароль:"
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:250
|
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:240
|
||||||
#: ../js/ui/status/network.js:327 ../js/ui/status/network.js:886
|
#: ../js/ui/status/network.js:322 ../js/ui/status/network.js:881
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Злучыць"
|
msgstr "Злучыць"
|
||||||
|
|
||||||
@ -805,13 +813,13 @@ msgstr "Удзельнік %s запрашае вас далучыцца да %s
|
|||||||
#: ../js/ui/components/telepathyClient.js:1164
|
#: ../js/ui/components/telepathyClient.js:1164
|
||||||
#: ../js/ui/components/telepathyClient.js:1199
|
#: ../js/ui/components/telepathyClient.js:1199
|
||||||
#: ../js/ui/components/telepathyClient.js:1233
|
#: ../js/ui/components/telepathyClient.js:1233
|
||||||
#: ../js/ui/components/telepathyClient.js:1290
|
#: ../js/ui/components/telepathyClient.js:1291
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Адмовіцца"
|
msgstr "Адмовіцца"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1170
|
#: ../js/ui/components/telepathyClient.js:1170
|
||||||
#: ../js/ui/components/telepathyClient.js:1239
|
#: ../js/ui/components/telepathyClient.js:1239
|
||||||
#: ../js/ui/components/telepathyClient.js:1295
|
#: ../js/ui/components/telepathyClient.js:1296
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Прыняць"
|
msgstr "Прыняць"
|
||||||
|
|
||||||
@ -848,97 +856,97 @@ msgstr "%s пасылае вам %s"
|
|||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
|
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1341
|
#: ../js/ui/components/telepathyClient.js:1342
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Сеткавая памылка"
|
msgstr "Сеткавая памылка"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1343
|
#: ../js/ui/components/telepathyClient.js:1344
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Няўдалая ідэнтыфікацыя"
|
msgstr "Няўдалая ідэнтыфікацыя"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1345
|
#: ../js/ui/components/telepathyClient.js:1346
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Памылка шыфравання"
|
msgstr "Памылка шыфравання"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1347
|
#: ../js/ui/components/telepathyClient.js:1348
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Сертыфікат не пададзены"
|
msgstr "Сертыфікат не пададзены"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1349
|
#: ../js/ui/components/telepathyClient.js:1350
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Сертыфікат не заслугоўвае даверу"
|
msgstr "Сертыфікат не заслугоўвае даверу"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1351
|
#: ../js/ui/components/telepathyClient.js:1352
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Сертыфікат састарэў"
|
msgstr "Сертыфікат састарэў"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1353
|
#: ../js/ui/components/telepathyClient.js:1354
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Сертыфікат не актывізаваны"
|
msgstr "Сертыфікат не актывізаваны"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1355
|
#: ../js/ui/components/telepathyClient.js:1356
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
|
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1357
|
#: ../js/ui/components/telepathyClient.js:1358
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
|
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1359
|
#: ../js/ui/components/telepathyClient.js:1360
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Сертыфікат уласнаручна падпісаны"
|
msgstr "Сертыфікат уласнаручна падпісаны"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1361
|
#: ../js/ui/components/telepathyClient.js:1362
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Уключаны рэжым па-за сеткай"
|
msgstr "Уключаны рэжым па-за сеткай"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1363
|
#: ../js/ui/components/telepathyClient.js:1364
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Шыфраванне недаступнае"
|
msgstr "Шыфраванне недаступнае"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1365
|
#: ../js/ui/components/telepathyClient.js:1366
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Хібны сертыфікат"
|
msgstr "Хібны сертыфікат"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1367
|
#: ../js/ui/components/telepathyClient.js:1368
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Адмоўлена ў злучэнні"
|
msgstr "Адмоўлена ў злучэнні"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1369
|
#: ../js/ui/components/telepathyClient.js:1370
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Не ўдалося ўсталяваць злучэнне"
|
msgstr "Не ўдалося ўсталяваць злучэнне"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1371
|
#: ../js/ui/components/telepathyClient.js:1372
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Злучэнне страчана"
|
msgstr "Злучэнне страчана"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1373
|
#: ../js/ui/components/telepathyClient.js:1374
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Гэты конт ужо злучаны з серверам"
|
msgstr "Гэты конт ужо злучаны з серверам"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1375
|
#: ../js/ui/components/telepathyClient.js:1376
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
|
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1377
|
#: ../js/ui/components/telepathyClient.js:1378
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Такі конт ужо існуе на серверы"
|
msgstr "Такі конт ужо існуе на серверы"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1379
|
#: ../js/ui/components/telepathyClient.js:1380
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
|
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1381
|
#: ../js/ui/components/telepathyClient.js:1382
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Сертыфікат быў адкліканы"
|
msgstr "Сертыфікат быў адкліканы"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1383
|
#: ../js/ui/components/telepathyClient.js:1384
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
|
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1385
|
#: ../js/ui/components/telepathyClient.js:1386
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -946,22 +954,22 @@ msgstr ""
|
|||||||
"Даўжыня сертыфіката сервера або глыбіня яго ланцуга перавышае абмежаванне, "
|
"Даўжыня сертыфіката сервера або глыбіня яго ланцуга перавышае абмежаванне, "
|
||||||
"выстаўленае крыптаграфічнай бібліятэкай"
|
"выстаўленае крыптаграфічнай бібліятэкай"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1387
|
#: ../js/ui/components/telepathyClient.js:1388
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Унутраная памылка"
|
msgstr "Унутраная памылка"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example. */
|
#. * name@jabber.org for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1397
|
#: ../js/ui/components/telepathyClient.js:1398
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Unable to connect to %s"
|
msgid "Unable to connect to %s"
|
||||||
msgstr "Не ўдалося злучыцца з %s"
|
msgstr "Не ўдалося злучыцца з %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1402
|
#: ../js/ui/components/telepathyClient.js:1403
|
||||||
msgid "View account"
|
msgid "View account"
|
||||||
msgstr "Праглядзець конт"
|
msgstr "Праглядзець конт"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1434
|
#: ../js/ui/components/telepathyClient.js:1440
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Невядомая прычына"
|
msgstr "Невядомая прычына"
|
||||||
|
|
||||||
@ -977,22 +985,22 @@ msgstr "Паказаць праграмы"
|
|||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Прыборная дошка"
|
msgstr "Прыборная дошка"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:86
|
#: ../js/ui/dateMenu.js:91
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Адкрыць каляндар"
|
msgstr "Адкрыць каляндар"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:90
|
#: ../js/ui/dateMenu.js:95
|
||||||
msgid "Open Clocks"
|
msgid "Open Clocks"
|
||||||
msgstr "Адкрыць гадзіннікі"
|
msgstr "Адкрыць гадзіннікі"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:97
|
#: ../js/ui/dateMenu.js:102
|
||||||
msgid "Date & Time Settings"
|
msgid "Date & Time Settings"
|
||||||
msgstr "Настройкі даты і часу"
|
msgstr "Настройкі даты і часу"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/dateMenu.js:187
|
#: ../js/ui/dateMenu.js:192
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B, %Y"
|
msgstr "%A, %e %B, %Y"
|
||||||
|
|
||||||
@ -1108,7 +1116,9 @@ msgstr "Выключыць камп'ютар пасля ўсталявання
|
|||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:315
|
#: ../js/ui/endSessionDialog.js:315
|
||||||
msgid "Running on battery power: please plug in before installing updates."
|
msgid "Running on battery power: please plug in before installing updates."
|
||||||
msgstr "Камп'ютар сілкуецца ад акумулятара: падлучыце да знешняй крыніцы энергіі перад усталяваннем абновак."
|
msgstr ""
|
||||||
|
"Камп'ютар сілкуецца ад акумулятара: падлучыце да знешняй крыніцы энергіі "
|
||||||
|
"перад усталяваннем абновак."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:332
|
#: ../js/ui/endSessionDialog.js:332
|
||||||
msgid "Some applications are busy or have unsaved work."
|
msgid "Some applications are busy or have unsaved work."
|
||||||
@ -1143,25 +1153,26 @@ msgstr "Сцягнуць і ўсталяваць \"%s\" з extensions.gnome.org?
|
|||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Клавіятура"
|
msgstr "Клавіятура"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:641
|
#: ../js/ui/lookingGlass.js:643
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Няма ўсталяваных пашырэнняў"
|
msgstr "Няма ўсталяваных пашырэнняў"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID. */
|
#. Translators: argument is an extension UUID. */
|
||||||
#: ../js/ui/lookingGlass.js:695
|
#: ../js/ui/lookingGlass.js:697
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "%s не зрабіў ніякіх памылак."
|
msgstr "%s не зрабіў ніякіх памылак."
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:701
|
#: ../js/ui/lookingGlass.js:703
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Хаваць памылкі"
|
msgstr "Хаваць памылкі"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:705 ../js/ui/lookingGlass.js:765
|
#: ../js/ui/lookingGlass.js:707 ../js/ui/lookingGlass.js:767
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Паказваць памылкі"
|
msgstr "Паказваць памылкі"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:714
|
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:59
|
||||||
|
#: ../js/ui/status/location.js:167
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Уключана"
|
msgstr "Уключана"
|
||||||
|
|
||||||
@ -1169,64 +1180,64 @@ msgstr "Уключана"
|
|||||||
#. because it's disabled by rfkill (airplane mode) */
|
#. because it's disabled by rfkill (airplane mode) */
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:560
|
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:164
|
||||||
#: ../src/gvc/gvc-mixer-control.c:1830
|
#: ../js/ui/status/network.js:555 ../src/gvc/gvc-mixer-control.c:1830
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Выключана"
|
msgstr "Выключана"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:719
|
#: ../js/ui/lookingGlass.js:721
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Памылка"
|
msgstr "Памылка"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:721
|
#: ../js/ui/lookingGlass.js:723
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Састарэла"
|
msgstr "Састарэла"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:723
|
#: ../js/ui/lookingGlass.js:725
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Сцягванне"
|
msgstr "Сцягванне"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:747
|
#: ../js/ui/lookingGlass.js:749
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Паглядзець выточны код"
|
msgstr "Паглядзець выточны код"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:756
|
#: ../js/ui/lookingGlass.js:758
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Сеціўная старонка"
|
msgstr "Сеціўная старонка"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1324
|
#: ../js/ui/messageTray.js:1326
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Адкрыць"
|
msgstr "Адкрыць"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1331
|
#: ../js/ui/messageTray.js:1333
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Выдаліць"
|
msgstr "Выдаліць"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1628
|
#: ../js/ui/messageTray.js:1630
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Апавяшчэнні"
|
msgstr "Апавяшчэнні"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1635
|
#: ../js/ui/messageTray.js:1637
|
||||||
msgid "Clear Messages"
|
msgid "Clear Messages"
|
||||||
msgstr "Ачысціць спіс апавяшчэнняў"
|
msgstr "Ачысціць спіс апавяшчэнняў"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1654
|
#: ../js/ui/messageTray.js:1656
|
||||||
msgid "Notification Settings"
|
msgid "Notification Settings"
|
||||||
msgstr "Настройкі апавяшчэння"
|
msgstr "Настройкі апавяшчэння"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1707
|
#: ../js/ui/messageTray.js:1709
|
||||||
msgid "Tray Menu"
|
msgid "Tray Menu"
|
||||||
msgstr "Меню трэя"
|
msgstr "Меню трэя"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1924
|
#: ../js/ui/messageTray.js:1926
|
||||||
msgid "No Messages"
|
msgid "No Messages"
|
||||||
msgstr "Апавяшчэнні адсутнічаюць"
|
msgstr "Апавяшчэнні адсутнічаюць"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1962
|
#: ../js/ui/messageTray.js:1964
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Абшар апавяшчэнняў"
|
msgstr "Абшар апавяшчэнняў"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2946
|
#: ../js/ui/messageTray.js:2962
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Сістэмная інфармацыя"
|
msgstr "Сістэмная інфармацыя"
|
||||||
|
|
||||||
@ -1243,11 +1254,11 @@ msgstr[0] "%d новае паведамленне"
|
|||||||
msgstr[1] "%d новыя паведамленні"
|
msgstr[1] "%d новыя паведамленні"
|
||||||
msgstr[2] "%d новых паведамленняў"
|
msgstr[2] "%d новых паведамленняў"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:83
|
#: ../js/ui/overview.js:84
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Адрабіць"
|
msgstr "Адрабіць"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:123
|
#: ../js/ui/overview.js:124
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Агляд"
|
msgstr "Агляд"
|
||||||
|
|
||||||
@ -1255,7 +1266,7 @@ msgstr "Агляд"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters. */
|
#. characters. */
|
||||||
#: ../js/ui/overview.js:257
|
#: ../js/ui/overview.js:250
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Увядзіце тэкст для пошуку..."
|
msgstr "Увядзіце тэкст для пошуку..."
|
||||||
|
|
||||||
@ -1299,27 +1310,27 @@ msgstr[0] "%d новае апавяшчэнне"
|
|||||||
msgstr[1] "%d новыя апавяшчэнні"
|
msgstr[1] "%d новыя апавяшчэнні"
|
||||||
msgstr[2] "%d новых апавяшчэнняў"
|
msgstr[2] "%d новых апавяшчэнняў"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Заблакіраваць"
|
msgstr "Заблакіраваць"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:707
|
#: ../js/ui/screenShield.js:708
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "GNOME патрабуе блакіравання экрана"
|
msgstr "GNOME патрабуе блакіравання экрана"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
|
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1309
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Не ўдалося заблакіраваць"
|
msgstr "Не ўдалося заблакіраваць"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
|
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1310
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Блакіраванне стрымана праграмай"
|
msgstr "Блакіраванне стрымана праграмай"
|
||||||
|
|
||||||
#: ../js/ui/search.js:589
|
#: ../js/ui/search.js:603
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Пошук..."
|
msgstr "Пошук..."
|
||||||
|
|
||||||
#: ../js/ui/search.js:632
|
#: ../js/ui/search.js:649
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Нічога не знойдзена."
|
msgstr "Нічога не знойдзена."
|
||||||
|
|
||||||
@ -1391,23 +1402,22 @@ msgstr "Высокая кантраснасць"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Буйны тэкст"
|
msgstr "Буйны тэкст"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:48
|
#: ../js/ui/status/bluetooth.js:49
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/location.js:62
|
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
||||||
#: ../js/ui/status/location.js:162 ../js/ui/status/network.js:151
|
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
||||||
#: ../js/ui/status/network.js:328 ../js/ui/status/network.js:1235
|
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
|
||||||
#: ../js/ui/status/network.js:1346 ../js/ui/status/rfkill.js:85
|
#: ../js/ui/status/rfkill.js:114
|
||||||
#: ../js/ui/status/rfkill.js:105
|
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
msgstr "Выключыць"
|
msgstr "Выключыць"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:53
|
#: ../js/ui/status/bluetooth.js:54
|
||||||
msgid "Bluetooth Settings"
|
msgid "Bluetooth Settings"
|
||||||
msgstr "Настройкі Bluetooth"
|
msgstr "Настройкі Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:100
|
#: ../js/ui/status/bluetooth.js:104
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d Connected Device"
|
msgid "%d Connected Device"
|
||||||
msgid_plural "%d Connected Devices"
|
msgid_plural "%d Connected Devices"
|
||||||
@ -1415,7 +1425,7 @@ msgstr[0] "%d злучанае прыстасаванне"
|
|||||||
msgstr[1] "%d злучаныя прыстасаванні"
|
msgstr[1] "%d злучаныя прыстасаванні"
|
||||||
msgstr[2] "%d злучаных прыстасаванняў"
|
msgstr[2] "%d злучаных прыстасаванняў"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1263
|
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1262
|
||||||
msgid "Not Connected"
|
msgid "Not Connected"
|
||||||
msgstr "Няма злучэння"
|
msgstr "Няма злучэння"
|
||||||
|
|
||||||
@ -1427,156 +1437,167 @@ msgstr "Яркасць"
|
|||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Паказаць клавіятурную раскладку"
|
msgstr "Паказаць клавіятурную раскладку"
|
||||||
|
|
||||||
#: ../js/ui/status/location.js:52
|
#: ../js/ui/status/location.js:53
|
||||||
msgid "Location"
|
msgid "Location"
|
||||||
msgstr "Месцапалажэнне"
|
msgstr "Месцапалажэнне"
|
||||||
|
|
||||||
#: ../js/ui/status/location.js:61 ../js/ui/status/location.js:161
|
#: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
|
||||||
#: ../js/ui/status/rfkill.js:84
|
msgid "Disable"
|
||||||
msgid "On"
|
msgstr "Выключыць"
|
||||||
msgstr "Укл."
|
|
||||||
|
|
||||||
#: ../js/ui/status/location.js:158 ../js/ui/status/network.js:246
|
#: ../js/ui/status/location.js:165
|
||||||
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1261
|
msgid "Enable"
|
||||||
msgid "Off"
|
|
||||||
msgstr "Выключана"
|
|
||||||
|
|
||||||
#: ../js/ui/status/location.js:159 ../js/ui/status/network.js:1235
|
|
||||||
msgid "Turn On"
|
|
||||||
msgstr "Уключыць"
|
msgstr "Уключыць"
|
||||||
|
|
||||||
|
#: ../js/ui/status/location.js:167
|
||||||
|
msgid "In Use"
|
||||||
|
msgstr "Ужыта"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:74
|
#: ../js/ui/status/network.js:74
|
||||||
msgid "<unknown>"
|
msgid "<unknown>"
|
||||||
msgstr "<невядома>"
|
msgstr "<невядома>"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1260
|
||||||
|
#: ../js/ui/status/network.js:1464
|
||||||
|
msgid "Off"
|
||||||
|
msgstr "Выключана"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:422
|
||||||
|
msgid "Connected"
|
||||||
|
msgstr "Злучана"
|
||||||
|
|
||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu) */
|
#. under NetworkManager's control (and thus cannot be used in the menu) */
|
||||||
#: ../js/ui/status/network.js:431
|
#: ../js/ui/status/network.js:426
|
||||||
msgid "unmanaged"
|
msgid "unmanaged"
|
||||||
msgstr "непадкантрольна"
|
msgstr "непадкантрольна"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:433
|
#: ../js/ui/status/network.js:428
|
||||||
msgid "disconnecting..."
|
msgid "disconnecting..."
|
||||||
msgstr "адлучэнне..."
|
msgstr "адлучэнне..."
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:439 ../js/ui/status/network.js:1363
|
#: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1362
|
||||||
msgid "connecting..."
|
msgid "connecting..."
|
||||||
msgstr "усталяванне злучэння..."
|
msgstr "усталяванне злучэння..."
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password */
|
#. Translators: this is for network connections that require some kind of key or password */
|
||||||
#: ../js/ui/status/network.js:442 ../js/ui/status/network.js:1366
|
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1365
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "патрэбная ідэнтыфікацыя"
|
msgstr "патрэбная ідэнтыфікацыя"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing */
|
#. module, which is missing */
|
||||||
#: ../js/ui/status/network.js:450
|
#: ../js/ui/status/network.js:445
|
||||||
msgid "firmware missing"
|
msgid "firmware missing"
|
||||||
msgstr "няма апаратнага апраграмавання"
|
msgstr "няма апаратнага апраграмавання"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage */
|
#. is disabled by rfkill, or it has no coverage */
|
||||||
#: ../js/ui/status/network.js:454
|
#: ../js/ui/status/network.js:449
|
||||||
msgid "unavailable"
|
msgid "unavailable"
|
||||||
msgstr "недаступна"
|
msgstr "недаступна"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:456 ../js/ui/status/network.js:1368
|
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1367
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "не ўдалося злучыцца"
|
msgstr "не ўдалося злучыцца"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:472
|
#: ../js/ui/status/network.js:467
|
||||||
msgid "Wired Settings"
|
msgid "Wired Settings"
|
||||||
msgstr "Настройкі праваднога злучэння"
|
msgstr "Настройкі праваднога злучэння"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:592
|
#: ../js/ui/status/network.js:509 ../js/ui/status/network.js:587
|
||||||
msgid "Mobile Broadband Settings"
|
msgid "Mobile Broadband Settings"
|
||||||
msgstr "Настройкі мабільнага злучэння"
|
msgstr "Настройкі мабільнага злучэння"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:556 ../js/ui/status/network.js:1259
|
#: ../js/ui/status/network.js:551 ../js/ui/status/network.js:1258
|
||||||
msgid "Hardware Disabled"
|
msgid "Hardware Disabled"
|
||||||
msgstr "Прыстасаванне выключана"
|
msgstr "Прыстасаванне выключана"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:600
|
#: ../js/ui/status/network.js:595
|
||||||
msgid "Use as Internet connection"
|
msgid "Use as Internet connection"
|
||||||
msgstr "Ужыць для злучэння з Інтэрнэтам"
|
msgstr "Ужыць для злучэння з Інтэрнэтам"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:781
|
#: ../js/ui/status/network.js:776
|
||||||
msgid "Airplane Mode is On"
|
msgid "Airplane Mode is On"
|
||||||
msgstr "Рэжым самалёта ўключаны"
|
msgstr "Рэжым самалёта ўключаны"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:782
|
#: ../js/ui/status/network.js:777
|
||||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||||
msgstr "У рэжыме самалёта выключаецца Wi-Fi."
|
msgstr "У рэжыме самалёта выключаецца Wi-Fi."
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:783
|
#: ../js/ui/status/network.js:778
|
||||||
msgid "Turn Off Airplane Mode"
|
msgid "Turn Off Airplane Mode"
|
||||||
msgstr "Выключыць рэжым самалёта"
|
msgstr "Выключыць рэжым самалёта"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:792
|
#: ../js/ui/status/network.js:787
|
||||||
msgid "Wi-Fi is Off"
|
msgid "Wi-Fi is Off"
|
||||||
msgstr "Wi-Fi выключаны"
|
msgstr "Wi-Fi выключаны"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:793
|
#: ../js/ui/status/network.js:788
|
||||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||||
msgstr "Каб злучыцца з сеткай, спачатку трэба ўключыць Wi-Fi."
|
msgstr "Каб злучыцца з сеткай, спачатку трэба ўключыць Wi-Fi."
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:794
|
#: ../js/ui/status/network.js:789
|
||||||
msgid "Turn On Wi-Fi"
|
msgid "Turn On Wi-Fi"
|
||||||
msgstr "Уключыць Wi-Fi"
|
msgstr "Уключыць Wi-Fi"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:819
|
#: ../js/ui/status/network.js:814
|
||||||
msgid "Wi-Fi Networks"
|
msgid "Wi-Fi Networks"
|
||||||
msgstr "Сеткі Wi-Fi"
|
msgstr "Сеткі Wi-Fi"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:821
|
#: ../js/ui/status/network.js:816
|
||||||
msgid "Select a network"
|
msgid "Select a network"
|
||||||
msgstr "Выберыце сетку"
|
msgstr "Выберыце сетку"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:850
|
#: ../js/ui/status/network.js:845
|
||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Няма сетак"
|
msgstr "Няма сетак"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:871 ../js/ui/status/rfkill.js:103
|
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "Задзейнічаць апаратны выключальнік"
|
msgstr "Задзейнічаць апаратны выключальнік"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1141
|
#: ../js/ui/status/network.js:1136
|
||||||
msgid "Select Network"
|
msgid "Select Network"
|
||||||
msgstr "Выбраць сетку"
|
msgstr "Выбраць сетку"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1147
|
#: ../js/ui/status/network.js:1142
|
||||||
msgid "Wi-Fi Settings"
|
msgid "Wi-Fi Settings"
|
||||||
msgstr "Настройкі Wi-Fi"
|
msgstr "Настройкі Wi-Fi"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1252
|
#: ../js/ui/status/network.js:1234
|
||||||
|
msgid "Turn On"
|
||||||
|
msgstr "Уключыць"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:1251
|
||||||
msgid "Hotspot Active"
|
msgid "Hotspot Active"
|
||||||
msgstr "Хотспот уключаны"
|
msgstr "Хотспот уключаны"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1255
|
#: ../js/ui/status/network.js:1254
|
||||||
msgid "Connecting"
|
msgid "Connecting"
|
||||||
msgstr "Злучэнне"
|
msgstr "Злучэнне"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1434 ../js/ui/status/rfkill.js:88
|
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Сеткавыя настройкі"
|
msgstr "Сеткавыя настройкі"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1436
|
#: ../js/ui/status/network.js:1435
|
||||||
msgid "VPN Settings"
|
msgid "VPN Settings"
|
||||||
msgstr "Настройкі VPN"
|
msgstr "Настройкі VPN"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1455
|
#: ../js/ui/status/network.js:1454
|
||||||
msgid "VPN"
|
msgid "VPN"
|
||||||
msgstr "VPN"
|
msgstr "VPN"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1598
|
#: ../js/ui/status/network.js:1607
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Сеткавы кіраўнік"
|
msgstr "Сеткавы кіраўнік"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1637
|
#: ../js/ui/status/network.js:1646
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Не ўдалося злучыцца"
|
msgstr "Не ўдалося злучыцца"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1638
|
#: ../js/ui/status/network.js:1647
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Не ўдалося ўключыць сеткавае злучэнне"
|
msgstr "Не ўдалося ўключыць сеткавае злучэнне"
|
||||||
|
|
||||||
@ -1610,10 +1631,14 @@ msgstr "UPS"
|
|||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Батарэя"
|
msgstr "Батарэя"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:82
|
#: ../js/ui/status/rfkill.js:83
|
||||||
msgid "Airplane Mode"
|
msgid "Airplane Mode"
|
||||||
msgstr "Рэжым самалёта"
|
msgstr "Рэжым самалёта"
|
||||||
|
|
||||||
|
#: ../js/ui/status/rfkill.js:85
|
||||||
|
msgid "On"
|
||||||
|
msgstr "Укл."
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:314
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Перамяніць карыстальніка"
|
msgstr "Перамяніць карыстальніка"
|
||||||
@ -1750,4 +1775,3 @@ msgstr "Пароль не можа быць пустым"
|
|||||||
#: ../src/shell-polkit-authentication-agent.c:343
|
#: ../src/shell-polkit-authentication-agent.c:343
|
||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"
|
msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"
|
||||||
|
|
||||||
|
1062
po/ca@valencia.po
1062
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
162
po/cs.po
162
po/cs.po
@ -12,8 +12,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2014-04-23 07:44+0000\n"
|
"POT-Creation-Date: 2014-05-18 07:27+0000\n"
|
||||||
"PO-Revision-Date: 2014-04-23 17:03+0100\n"
|
"PO-Revision-Date: 2014-05-18 15:23+0200\n"
|
||||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
@ -371,30 +371,34 @@ msgstr "Nelze analyzovat příkaz:"
|
|||||||
msgid "Execution of “%s” failed:"
|
msgid "Execution of “%s” failed:"
|
||||||
msgstr "Vykonání „%s“ selhalo:"
|
msgstr "Vykonání „%s“ selhalo:"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:636
|
#: ../js/ui/appDisplay.js:640
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
msgstr "Zde se objeví často používané aplikace"
|
msgstr "Zde se objeví často používané aplikace"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:747
|
#: ../js/ui/appDisplay.js:751
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Časté"
|
msgstr "Časté"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:754
|
#: ../js/ui/appDisplay.js:758
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Všechny"
|
msgstr "Všechny"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1567
|
#: ../js/ui/appDisplay.js:1571
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nové okno"
|
msgstr "Nové okno"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1589 ../js/ui/dash.js:285
|
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Odstranit z oblíbených"
|
msgstr "Odstranit z oblíbených"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1595
|
#: ../js/ui/appDisplay.js:1599
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Přidat mezi oblíbené"
|
msgstr "Přidat mezi oblíbené"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:1608
|
||||||
|
msgid "Show Details"
|
||||||
|
msgstr "Zobrazit podrobnosti"
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:87
|
#: ../js/ui/appFavorites.js:87
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
@ -406,7 +410,7 @@ msgid "%s has been removed from your favorites."
|
|||||||
msgstr "%s byl odstraněn z oblíbených."
|
msgstr "%s byl odstraněn z oblíbených."
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
|
||||||
#: ../js/ui/status/system.js:334
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Nastavení"
|
msgstr "Nastavení"
|
||||||
|
|
||||||
@ -417,14 +421,14 @@ msgstr "Změnit pozadí…"
|
|||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:64
|
#: ../js/ui/calendar.js:67
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "All Day"
|
msgid "All Day"
|
||||||
msgstr "Celý den"
|
msgstr "Celý den"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list, if 24h format,
|
#. Translators: Shown in calendar event list, if 24h format,
|
||||||
#. \u2236 is a ratio character, similar to : */
|
#. \u2236 is a ratio character, similar to : */
|
||||||
#: ../js/ui/calendar.js:70
|
#: ../js/ui/calendar.js:73
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%k∶%M"
|
msgstr "%k∶%M"
|
||||||
@ -432,7 +436,7 @@ msgstr "%k∶%M"
|
|||||||
#. Translators: Shown in calendar event list, if 12h format,
|
#. Translators: Shown in calendar event list, if 12h format,
|
||||||
#. \u2236 is a ratio character, similar to : and \u2009 is
|
#. \u2236 is a ratio character, similar to : and \u2009 is
|
||||||
#. a thin space */
|
#. a thin space */
|
||||||
#: ../js/ui/calendar.js:79
|
#: ../js/ui/calendar.js:82
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%l∶%M %p"
|
msgstr "%l∶%M %p"
|
||||||
@ -442,43 +446,43 @@ msgstr "%l∶%M %p"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:110
|
#: ../js/ui/calendar.js:113
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Ne"
|
msgstr "Ne"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday */
|
#. Translators: Calendar grid abbreviation for Monday */
|
||||||
#: ../js/ui/calendar.js:112
|
#: ../js/ui/calendar.js:115
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "Po"
|
msgstr "Po"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday */
|
#. Translators: Calendar grid abbreviation for Tuesday */
|
||||||
#: ../js/ui/calendar.js:114
|
#: ../js/ui/calendar.js:117
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Út"
|
msgstr "Út"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday */
|
#. Translators: Calendar grid abbreviation for Wednesday */
|
||||||
#: ../js/ui/calendar.js:116
|
#: ../js/ui/calendar.js:119
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "St"
|
msgstr "St"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday */
|
#. Translators: Calendar grid abbreviation for Thursday */
|
||||||
#: ../js/ui/calendar.js:118
|
#: ../js/ui/calendar.js:121
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Čt"
|
msgstr "Čt"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday */
|
#. Translators: Calendar grid abbreviation for Friday */
|
||||||
#: ../js/ui/calendar.js:120
|
#: ../js/ui/calendar.js:123
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "Pá"
|
msgstr "Pá"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday */
|
#. Translators: Calendar grid abbreviation for Saturday */
|
||||||
#: ../js/ui/calendar.js:122
|
#: ../js/ui/calendar.js:125
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "So"
|
msgstr "So"
|
||||||
@ -489,89 +493,85 @@ msgstr "So"
|
|||||||
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
||||||
#. * both be 'T').
|
#. * both be 'T').
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:135
|
#: ../js/ui/calendar.js:138
|
||||||
msgctxt "list sunday"
|
msgctxt "list sunday"
|
||||||
msgid "Su"
|
msgid "Su"
|
||||||
msgstr "Ne"
|
msgstr "Ne"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Monday */
|
#. Translators: Event list abbreviation for Monday */
|
||||||
#: ../js/ui/calendar.js:137
|
#: ../js/ui/calendar.js:140
|
||||||
msgctxt "list monday"
|
msgctxt "list monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "Po"
|
msgstr "Po"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Tuesday */
|
#. Translators: Event list abbreviation for Tuesday */
|
||||||
#: ../js/ui/calendar.js:139
|
#: ../js/ui/calendar.js:142
|
||||||
msgctxt "list tuesday"
|
msgctxt "list tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Út"
|
msgstr "Út"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Wednesday */
|
#. Translators: Event list abbreviation for Wednesday */
|
||||||
#: ../js/ui/calendar.js:141
|
#: ../js/ui/calendar.js:144
|
||||||
msgctxt "list wednesday"
|
msgctxt "list wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "St"
|
msgstr "St"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Thursday */
|
#. Translators: Event list abbreviation for Thursday */
|
||||||
#: ../js/ui/calendar.js:143
|
#: ../js/ui/calendar.js:146
|
||||||
msgctxt "list thursday"
|
msgctxt "list thursday"
|
||||||
msgid "Th"
|
msgid "Th"
|
||||||
msgstr "Čt"
|
msgstr "Čt"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Friday */
|
#. Translators: Event list abbreviation for Friday */
|
||||||
#: ../js/ui/calendar.js:145
|
#: ../js/ui/calendar.js:148
|
||||||
msgctxt "list friday"
|
msgctxt "list friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "Pá"
|
msgstr "Pá"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Saturday */
|
#. Translators: Event list abbreviation for Saturday */
|
||||||
#: ../js/ui/calendar.js:147
|
#: ../js/ui/calendar.js:150
|
||||||
msgctxt "list saturday"
|
msgctxt "list saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "So"
|
msgstr "So"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:390
|
#: ../js/ui/calendar.js:453
|
||||||
msgid "calendar:MY"
|
|
||||||
msgstr "calendar:MY"
|
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:450
|
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Předchozí měsíc"
|
msgstr "Předchozí měsíc"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:460
|
#: ../js/ui/calendar.js:463
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Následující měsíc"
|
msgstr "Následující měsíc"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events */
|
#. Translators: Text to show if there are no events */
|
||||||
#: ../js/ui/calendar.js:772
|
#: ../js/ui/calendar.js:775
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Nic nenaplánováno"
|
msgstr "Nic nenaplánováno"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
||||||
#: ../js/ui/calendar.js:790
|
#: ../js/ui/calendar.js:793
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %e. %B"
|
msgstr "%A, %e. %B"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
||||||
#: ../js/ui/calendar.js:793
|
#: ../js/ui/calendar.js:796
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %e. %B %Y"
|
msgstr "%A, %e. %B %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:804
|
#: ../js/ui/calendar.js:807
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Dnes"
|
msgstr "Dnes"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:808
|
#: ../js/ui/calendar.js:811
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Zítra"
|
msgstr "Zítra"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:819
|
#: ../js/ui/calendar.js:822
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Tento týden"
|
msgstr "Tento týden"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:827
|
#: ../js/ui/calendar.js:830
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Následující týden"
|
msgstr "Následující týden"
|
||||||
|
|
||||||
@ -984,15 +984,15 @@ msgstr "Zobrazit aplikace"
|
|||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Oblíbené"
|
msgstr "Oblíbené"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:91
|
#: ../js/ui/dateMenu.js:97
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Otevřít kalendář"
|
msgstr "Otevřít kalendář"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:95
|
#: ../js/ui/dateMenu.js:101
|
||||||
msgid "Open Clocks"
|
msgid "Open Clocks"
|
||||||
msgstr "Otevřít Hodiny"
|
msgstr "Otevřít Hodiny"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:102
|
#: ../js/ui/dateMenu.js:108
|
||||||
msgid "Date & Time Settings"
|
msgid "Date & Time Settings"
|
||||||
msgstr "Nastavení data a času"
|
msgstr "Nastavení data a času"
|
||||||
|
|
||||||
@ -1000,7 +1000,7 @@ msgstr "Nastavení data a času"
|
|||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/dateMenu.js:192
|
#: ../js/ui/dateMenu.js:205
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e. %B, %Y"
|
msgstr "%A, %e. %B, %Y"
|
||||||
|
|
||||||
@ -1248,7 +1248,7 @@ msgctxt "program"
|
|||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Neznámé"
|
msgstr "Neznámé"
|
||||||
|
|
||||||
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151
|
#: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1294,7 +1294,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Zadejte příkaz:"
|
msgstr "Zadejte příkaz:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:114
|
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Zavřít"
|
msgstr "Zavřít"
|
||||||
|
|
||||||
@ -1312,7 +1312,7 @@ msgstr[0] "%d nové upozornění"
|
|||||||
msgstr[1] "%d nová upozornění"
|
msgstr[1] "%d nová upozornění"
|
||||||
msgstr[2] "%d nových upozornění"
|
msgstr[2] "%d nových upozornění"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Uzamknout"
|
msgstr "Uzamknout"
|
||||||
|
|
||||||
@ -1410,8 +1410,8 @@ msgstr "Bluetooth"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
||||||
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
||||||
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85
|
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
|
||||||
#: ../js/ui/status/rfkill.js:105
|
#: ../js/ui/status/rfkill.js:114
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
msgstr "Vypnout"
|
msgstr "Vypnout"
|
||||||
|
|
||||||
@ -1555,7 +1555,7 @@ msgstr "Vyberte síť"
|
|||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Žádné sítě"
|
msgstr "Žádné sítě"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103
|
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "K vypnutí použijte fyzický vypínač"
|
msgstr "K vypnutí použijte fyzický vypínač"
|
||||||
|
|
||||||
@ -1588,7 +1588,7 @@ msgstr "je vyžadováno ověření"
|
|||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "připojení selhalo"
|
msgstr "připojení selhalo"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88
|
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Nastavení sítě"
|
msgstr "Nastavení sítě"
|
||||||
|
|
||||||
@ -1638,31 +1638,31 @@ msgstr "Záložní zdroj"
|
|||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Baterie"
|
msgstr "Baterie"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:82
|
#: ../js/ui/status/rfkill.js:83
|
||||||
msgid "Airplane Mode"
|
msgid "Airplane Mode"
|
||||||
msgstr "Režim „letadlo“"
|
msgstr "Režim „letadlo“"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:84
|
#: ../js/ui/status/rfkill.js:85
|
||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "Zapnuto"
|
msgstr "Zapnuto"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:317
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Přepnout uživatele"
|
msgstr "Přepnout uživatele"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:319
|
#: ../js/ui/status/system.js:322
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odhlásit se"
|
msgstr "Odhlásit se"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:338
|
#: ../js/ui/status/system.js:341
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Zámek otočení"
|
msgstr "Zámek otočení"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:346
|
#: ../js/ui/status/system.js:349
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Uspat do paměti"
|
msgstr "Uspat do paměti"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:352
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Vypnout"
|
msgstr "Vypnout"
|
||||||
|
|
||||||
@ -1699,22 +1699,22 @@ msgstr "Hledat"
|
|||||||
msgid "“%s” is ready"
|
msgid "“%s” is ready"
|
||||||
msgstr "Připraveno „%s“"
|
msgstr "Připraveno „%s“"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:56
|
#: ../js/ui/windowManager.js:57
|
||||||
msgid "Do you want to keep these display settings?"
|
msgid "Do you want to keep these display settings?"
|
||||||
msgstr "Chcete zachovat nastavení displeje?"
|
msgstr "Chcete zachovat nastavení displeje?"
|
||||||
|
|
||||||
#. Translators: this and the following message should be limited in lenght,
|
#. Translators: this and the following message should be limited in lenght,
|
||||||
#. to avoid ellipsizing the labels.
|
#. to avoid ellipsizing the labels.
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/windowManager.js:75
|
#: ../js/ui/windowManager.js:76
|
||||||
msgid "Revert Settings"
|
msgid "Revert Settings"
|
||||||
msgstr "Obnovit původní"
|
msgstr "Obnovit původní"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:79
|
#: ../js/ui/windowManager.js:80
|
||||||
msgid "Keep Changes"
|
msgid "Keep Changes"
|
||||||
msgstr "Zachovat"
|
msgstr "Zachovat"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:98
|
#: ../js/ui/windowManager.js:99
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Settings changes will revert in %d second"
|
msgid "Settings changes will revert in %d second"
|
||||||
msgid_plural "Settings changes will revert in %d seconds"
|
msgid_plural "Settings changes will revert in %d seconds"
|
||||||
@ -1722,6 +1722,46 @@ msgstr[0] "Nastavení se obnoví na původní za %d sekundu"
|
|||||||
msgstr[1] "Nastavení se obnoví na původní za %d sekundy"
|
msgstr[1] "Nastavení se obnoví na původní za %d sekundy"
|
||||||
msgstr[2] "Nastavení se obnoví na původní za %d sekund"
|
msgstr[2] "Nastavení se obnoví na původní za %d sekund"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:33
|
||||||
|
msgid "Minimize"
|
||||||
|
msgstr "Minimalizovat"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:40
|
||||||
|
msgid "Unmaximize"
|
||||||
|
msgstr "Zrušit maximalizaci"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:44
|
||||||
|
msgid "Maximize"
|
||||||
|
msgstr "Maximalizovat"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:51
|
||||||
|
msgid "Move"
|
||||||
|
msgstr "Přesunout"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:57
|
||||||
|
msgid "Resize"
|
||||||
|
msgstr "Změnit velikost"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:64
|
||||||
|
msgid "Move Titlebar Onscreen"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:69
|
||||||
|
msgid "Always on Top"
|
||||||
|
msgstr "Vždy nahoře"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:86
|
||||||
|
msgid "Always on Visible Workspace"
|
||||||
|
msgstr "Vždy na viditelné ploše"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:103
|
||||||
|
msgid "Move to Workspace Up"
|
||||||
|
msgstr "Přesunout o plochu výš"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:108
|
||||||
|
msgid "Move to Workspace Down"
|
||||||
|
msgstr "Přesunout o plochu níž"
|
||||||
|
|
||||||
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
||||||
msgid "Evolution Calendar"
|
msgid "Evolution Calendar"
|
||||||
msgstr "Kalendář Evolution"
|
msgstr "Kalendář Evolution"
|
||||||
|
1428
po/en_GB.po
1428
po/en_GB.po
File diff suppressed because it is too large
Load Diff
367
po/id.po
367
po/id.po
@ -10,9 +10,9 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2014-04-05 19:59+0000\n"
|
"POT-Creation-Date: 2014-05-22 07:28+0000\n"
|
||||||
"PO-Revision-Date: 2014-04-09 05:35+0700\n"
|
"PO-Revision-Date: 2014-05-22 16:21+0700\n"
|
||||||
"Last-Translator: Dirgita <dirgitadevina@yahoo.co.id>\n"
|
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
|
||||||
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
|
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
|
||||||
"Language: id\n"
|
"Language: id\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -20,7 +20,7 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
"X-Generator: Lokalize 1.5\n"
|
"X-Generator: Poedit 1.5.7\n"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||||
msgid "System"
|
msgid "System"
|
||||||
@ -341,25 +341,25 @@ msgstr "Pilih Sesi"
|
|||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Tak masuk daftar?"
|
msgstr "Tak masuk daftar?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:614
|
#: ../js/gdm/loginDialog.js:616
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(cth., pengguna dari %s)"
|
msgstr "(cth., pengguna dari %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
|
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
|
||||||
#: ../js/ui/components/networkAgent.js:280
|
#: ../js/ui/components/networkAgent.js:280
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nama pengguna: "
|
msgstr "Nama pengguna: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:920
|
#: ../js/gdm/loginDialog.js:924
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Jendela Log Masuk"
|
msgstr "Jendela Log Masuk"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:322
|
#: ../js/gdm/util.js:323
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Galat otentikasi"
|
msgstr "Galat otentikasi"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:452
|
#: ../js/gdm/util.js:453
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(atau gesekkan jari)"
|
msgstr "(atau gesekkan jari)"
|
||||||
|
|
||||||
@ -376,30 +376,34 @@ msgstr "Tak dapat mengurai perintah:"
|
|||||||
msgid "Execution of “%s” failed:"
|
msgid "Execution of “%s” failed:"
|
||||||
msgstr "Eksekusi \"%s\" gagal:"
|
msgstr "Eksekusi \"%s\" gagal:"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:636
|
#: ../js/ui/appDisplay.js:640
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
msgstr "Aplikasi yang sering dipakai akan muncul di sini"
|
msgstr "Aplikasi yang sering dipakai akan muncul di sini"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:747
|
#: ../js/ui/appDisplay.js:751
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Sering"
|
msgstr "Sering"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:754
|
#: ../js/ui/appDisplay.js:758
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Semua"
|
msgstr "Semua"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1566
|
#: ../js/ui/appDisplay.js:1571
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Jendela Baru"
|
msgstr "Jendela Baru"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1588 ../js/ui/dash.js:285
|
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Hapus dari Favorit"
|
msgstr "Hapus dari Favorit"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1594
|
#: ../js/ui/appDisplay.js:1599
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Tambah ke Favorit"
|
msgstr "Tambah ke Favorit"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:1608
|
||||||
|
msgid "Show Details"
|
||||||
|
msgstr "Tampilkan Rincian"
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:87
|
#: ../js/ui/appFavorites.js:87
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
@ -410,8 +414,8 @@ msgstr "%s telah ditambahkan ke favorit Anda."
|
|||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s telah dihapus dari favorit Anda."
|
msgstr "%s telah dihapus dari favorit Anda."
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
|
||||||
#: ../js/ui/status/system.js:334
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Pengaturan"
|
msgstr "Pengaturan"
|
||||||
|
|
||||||
@ -422,14 +426,14 @@ msgstr "Ubah Latar…"
|
|||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:64
|
#: ../js/ui/calendar.js:67
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "All Day"
|
msgid "All Day"
|
||||||
msgstr "Sepanjang Hari"
|
msgstr "Sepanjang Hari"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list, if 24h format,
|
#. Translators: Shown in calendar event list, if 24h format,
|
||||||
#. \u2236 is a ratio character, similar to : */
|
#. \u2236 is a ratio character, similar to : */
|
||||||
#: ../js/ui/calendar.js:70
|
#: ../js/ui/calendar.js:73
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
@ -437,7 +441,7 @@ msgstr "%H∶%M"
|
|||||||
#. Translators: Shown in calendar event list, if 12h format,
|
#. Translators: Shown in calendar event list, if 12h format,
|
||||||
#. \u2236 is a ratio character, similar to : and \u2009 is
|
#. \u2236 is a ratio character, similar to : and \u2009 is
|
||||||
#. a thin space */
|
#. a thin space */
|
||||||
#: ../js/ui/calendar.js:79
|
#: ../js/ui/calendar.js:82
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%l∶%M %p"
|
msgstr "%l∶%M %p"
|
||||||
@ -447,43 +451,43 @@ msgstr "%l∶%M %p"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:110
|
#: ../js/ui/calendar.js:113
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "M"
|
msgstr "M"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday */
|
#. Translators: Calendar grid abbreviation for Monday */
|
||||||
#: ../js/ui/calendar.js:112
|
#: ../js/ui/calendar.js:115
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday */
|
#. Translators: Calendar grid abbreviation for Tuesday */
|
||||||
#: ../js/ui/calendar.js:114
|
#: ../js/ui/calendar.js:117
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday */
|
#. Translators: Calendar grid abbreviation for Wednesday */
|
||||||
#: ../js/ui/calendar.js:116
|
#: ../js/ui/calendar.js:119
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "R"
|
msgstr "R"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday */
|
#. Translators: Calendar grid abbreviation for Thursday */
|
||||||
#: ../js/ui/calendar.js:118
|
#: ../js/ui/calendar.js:121
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "K"
|
msgstr "K"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday */
|
#. Translators: Calendar grid abbreviation for Friday */
|
||||||
#: ../js/ui/calendar.js:120
|
#: ../js/ui/calendar.js:123
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "J"
|
msgstr "J"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday */
|
#. Translators: Calendar grid abbreviation for Saturday */
|
||||||
#: ../js/ui/calendar.js:122
|
#: ../js/ui/calendar.js:125
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
@ -494,97 +498,93 @@ msgstr "S"
|
|||||||
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
||||||
#. * both be 'T').
|
#. * both be 'T').
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:135
|
#: ../js/ui/calendar.js:138
|
||||||
msgctxt "list sunday"
|
msgctxt "list sunday"
|
||||||
msgid "Su"
|
msgid "Su"
|
||||||
msgstr "Min"
|
msgstr "Min"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Monday */
|
#. Translators: Event list abbreviation for Monday */
|
||||||
#: ../js/ui/calendar.js:137
|
#: ../js/ui/calendar.js:140
|
||||||
msgctxt "list monday"
|
msgctxt "list monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "Sen"
|
msgstr "Sen"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Tuesday */
|
#. Translators: Event list abbreviation for Tuesday */
|
||||||
#: ../js/ui/calendar.js:139
|
#: ../js/ui/calendar.js:142
|
||||||
msgctxt "list tuesday"
|
msgctxt "list tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Sel"
|
msgstr "Sel"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Wednesday */
|
#. Translators: Event list abbreviation for Wednesday */
|
||||||
#: ../js/ui/calendar.js:141
|
#: ../js/ui/calendar.js:144
|
||||||
msgctxt "list wednesday"
|
msgctxt "list wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "Rab"
|
msgstr "Rab"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Thursday */
|
#. Translators: Event list abbreviation for Thursday */
|
||||||
#: ../js/ui/calendar.js:143
|
#: ../js/ui/calendar.js:146
|
||||||
msgctxt "list thursday"
|
msgctxt "list thursday"
|
||||||
msgid "Th"
|
msgid "Th"
|
||||||
msgstr "Kam"
|
msgstr "Kam"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Friday */
|
#. Translators: Event list abbreviation for Friday */
|
||||||
#: ../js/ui/calendar.js:145
|
#: ../js/ui/calendar.js:148
|
||||||
msgctxt "list friday"
|
msgctxt "list friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "Jum"
|
msgstr "Jum"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Saturday */
|
#. Translators: Event list abbreviation for Saturday */
|
||||||
#: ../js/ui/calendar.js:147
|
#: ../js/ui/calendar.js:150
|
||||||
msgctxt "list saturday"
|
msgctxt "list saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Sab"
|
msgstr "Sab"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:390
|
#: ../js/ui/calendar.js:453
|
||||||
msgid "calendar:MY"
|
|
||||||
msgstr "calendar:MY"
|
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:450
|
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Bulan sebelumnya"
|
msgstr "Bulan sebelumnya"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:460
|
#: ../js/ui/calendar.js:463
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Bulan selanjutnya"
|
msgstr "Bulan selanjutnya"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events */
|
#. Translators: Text to show if there are no events */
|
||||||
#: ../js/ui/calendar.js:772
|
#: ../js/ui/calendar.js:775
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Tak Ada Jadwal"
|
msgstr "Tak Ada Jadwal"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
||||||
#: ../js/ui/calendar.js:790
|
#: ../js/ui/calendar.js:793
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d %B"
|
msgstr "%A, %d %B"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
||||||
#: ../js/ui/calendar.js:793
|
#: ../js/ui/calendar.js:796
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %d %B %Y"
|
msgstr "%A, %d %B %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:804
|
#: ../js/ui/calendar.js:807
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Hari ini"
|
msgstr "Hari ini"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:808
|
#: ../js/ui/calendar.js:811
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Besok"
|
msgstr "Besok"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:819
|
#: ../js/ui/calendar.js:822
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Minggu ini"
|
msgstr "Minggu ini"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:827
|
#: ../js/ui/calendar.js:830
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Minggu depan"
|
msgstr "Minggu depan"
|
||||||
|
|
||||||
#: ../js/ui/components/automountManager.js:90
|
#: ../js/ui/components/automountManager.js:91
|
||||||
msgid "External drive connected"
|
msgid "External drive connected"
|
||||||
msgstr "Drive eksternal tersambung"
|
msgstr "Drive eksternal tersambung"
|
||||||
|
|
||||||
#: ../js/ui/components/automountManager.js:101
|
#: ../js/ui/components/automountManager.js:102
|
||||||
msgid "External drive disconnected"
|
msgid "External drive disconnected"
|
||||||
msgstr "Drive eksternal terputus"
|
msgstr "Drive eksternal terputus"
|
||||||
|
|
||||||
@ -729,77 +729,77 @@ msgid "Mute"
|
|||||||
msgstr "Bisu"
|
msgstr "Bisu"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:955
|
#: ../js/ui/components/telepathyClient.js:958
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:962
|
#: ../js/ui/components/telepathyClient.js:965
|
||||||
msgid "Yesterday, %H∶%M"
|
msgid "Yesterday, %H∶%M"
|
||||||
msgstr "Kemarin, %H:%M"
|
msgstr "Kemarin, %H:%M"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 24h format. i.e. "Monday, 14:30" */
|
#. string in 24h format. i.e. "Monday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:969
|
#: ../js/ui/components/telepathyClient.js:972
|
||||||
msgid "%A, %H∶%M"
|
msgid "%A, %H∶%M"
|
||||||
msgstr "%A, %H∶%M"
|
msgstr "%A, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 24h format.
|
#. followed by a time string in 24h format.
|
||||||
#. i.e. "May 25, 14:30" */
|
#. i.e. "May 25, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:976
|
#: ../js/ui/components/telepathyClient.js:979
|
||||||
msgid "%B %d, %H∶%M"
|
msgid "%B %d, %H∶%M"
|
||||||
msgstr "%d %B, %H∶%M"
|
msgstr "%d %B, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 24h format.
|
#. number followed by a time string in 24h format.
|
||||||
#. i.e. "May 25 2012, 14:30" */
|
#. i.e. "May 25 2012, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:982
|
#: ../js/ui/components/telepathyClient.js:985
|
||||||
msgid "%B %d %Y, %H∶%M"
|
msgid "%B %d %Y, %H∶%M"
|
||||||
msgstr "%d %B %Y, %H∶%M"
|
msgstr "%d %B %Y, %H∶%M"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:991
|
#: ../js/ui/components/telepathyClient.js:994
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:998
|
#: ../js/ui/components/telepathyClient.js:1001
|
||||||
msgid "Yesterday, %l∶%M %p"
|
msgid "Yesterday, %l∶%M %p"
|
||||||
msgstr "Kemarin, %l∶%M %p"
|
msgstr "Kemarin, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1005
|
#: ../js/ui/components/telepathyClient.js:1008
|
||||||
msgid "%A, %l∶%M %p"
|
msgid "%A, %l∶%M %p"
|
||||||
msgstr "%A, %l∶%M %p"
|
msgstr "%A, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 12h format.
|
#. followed by a time string in 12h format.
|
||||||
#. i.e. "May 25, 2:30 pm" */
|
#. i.e. "May 25, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1012
|
#: ../js/ui/components/telepathyClient.js:1015
|
||||||
msgid "%B %d, %l∶%M %p"
|
msgid "%B %d, %l∶%M %p"
|
||||||
msgstr "%d %B, %l∶%M %p"
|
msgstr "%d %B, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 12h format.
|
#. number followed by a time string in 12h format.
|
||||||
#. i.e. "May 25 2012, 2:30 pm"*/
|
#. i.e. "May 25 2012, 2:30 pm"*/
|
||||||
#: ../js/ui/components/telepathyClient.js:1018
|
#: ../js/ui/components/telepathyClient.js:1021
|
||||||
msgid "%B %d %Y, %l∶%M %p"
|
msgid "%B %d %Y, %l∶%M %p"
|
||||||
msgstr "%d %B %Y, %l∶%M %p"
|
msgstr "%d %B %Y, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name. */
|
#. IM name. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1051
|
#: ../js/ui/components/telepathyClient.js:1054
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s sekarang dikenal sebagai %s"
|
msgstr "%s sekarang dikenal sebagai %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example. */
|
#. * room@jabber.org for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1154
|
#: ../js/ui/components/telepathyClient.js:1158
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Undangan ke %s"
|
msgstr "Undangan ke %s"
|
||||||
@ -807,38 +807,38 @@ msgstr "Undangan ke %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. translators: first argument is the name of a contact and the second
|
||||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example. */
|
#. * for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1162
|
#: ../js/ui/components/telepathyClient.js:1166
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s mengundang Anda untuk bergabung dengan %s"
|
msgstr "%s mengundang Anda untuk bergabung dengan %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1164
|
#: ../js/ui/components/telepathyClient.js:1168
|
||||||
#: ../js/ui/components/telepathyClient.js:1199
|
#: ../js/ui/components/telepathyClient.js:1203
|
||||||
#: ../js/ui/components/telepathyClient.js:1233
|
#: ../js/ui/components/telepathyClient.js:1237
|
||||||
#: ../js/ui/components/telepathyClient.js:1291
|
#: ../js/ui/components/telepathyClient.js:1295
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Tolak"
|
msgstr "Tolak"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1170
|
#: ../js/ui/components/telepathyClient.js:1174
|
||||||
#: ../js/ui/components/telepathyClient.js:1239
|
#: ../js/ui/components/telepathyClient.js:1243
|
||||||
#: ../js/ui/components/telepathyClient.js:1296
|
#: ../js/ui/components/telepathyClient.js:1300
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Terima"
|
msgstr "Terima"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example. */
|
#. translators: argument is a contact name like Alice for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1189
|
#: ../js/ui/components/telepathyClient.js:1193
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Panggilan video dari %s"
|
msgstr "Panggilan video dari %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example. */
|
#. translators: argument is a contact name like Alice for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1192
|
#: ../js/ui/components/telepathyClient.js:1196
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Panggilan dari %s"
|
msgstr "Panggilan dari %s"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun */
|
#. translators: this is a button label (verb), not a noun */
|
||||||
#: ../js/ui/components/telepathyClient.js:1206
|
#: ../js/ui/components/telepathyClient.js:1210
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Jawab"
|
msgstr "Jawab"
|
||||||
|
|
||||||
@ -847,111 +847,111 @@ msgstr "Jawab"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1227
|
#: ../js/ui/components/telepathyClient.js:1231
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s sedang mengirimi Anda %s"
|
msgstr "%s sedang mengirimi Anda %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias */
|
#. To translators: The parameter is the contact's alias */
|
||||||
#: ../js/ui/components/telepathyClient.js:1256
|
#: ../js/ui/components/telepathyClient.js:1260
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s ingin minta izin melihat Anda ketika Anda daring"
|
msgstr "%s ingin minta izin melihat Anda ketika Anda daring"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1342
|
#: ../js/ui/components/telepathyClient.js:1346
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Galat jaringan"
|
msgstr "Galat jaringan"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1344
|
#: ../js/ui/components/telepathyClient.js:1348
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Otentikasi gagal"
|
msgstr "Otentikasi gagal"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1346
|
#: ../js/ui/components/telepathyClient.js:1350
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Galat enkripsi"
|
msgstr "Galat enkripsi"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1348
|
#: ../js/ui/components/telepathyClient.js:1352
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Sertifikat tidak disediakan"
|
msgstr "Sertifikat tidak disediakan"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1350
|
#: ../js/ui/components/telepathyClient.js:1354
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Sertifikat tidak dipercaya"
|
msgstr "Sertifikat tidak dipercaya"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1352
|
#: ../js/ui/components/telepathyClient.js:1356
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Sertifikat kadaluarsa"
|
msgstr "Sertifikat kadaluarsa"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1358
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Sertifikat tidak diaktifkan"
|
msgstr "Sertifikat tidak diaktifkan"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1356
|
#: ../js/ui/components/telepathyClient.js:1360
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Nama host sertifikat tidak cocok"
|
msgstr "Nama host sertifikat tidak cocok"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1358
|
#: ../js/ui/components/telepathyClient.js:1362
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Sidik jari sertifikat tidak cocok"
|
msgstr "Sidik jari sertifikat tidak cocok"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1360
|
#: ../js/ui/components/telepathyClient.js:1364
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Sertifikat ditandatangani sendiri"
|
msgstr "Sertifikat ditandatangani sendiri"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1362
|
#: ../js/ui/components/telepathyClient.js:1366
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Status diatur ke luring"
|
msgstr "Status diatur ke luring"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1368
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Enkripsi tidak tersedia"
|
msgstr "Enkripsi tidak tersedia"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1366
|
#: ../js/ui/components/telepathyClient.js:1370
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Sertifikat tidak valid"
|
msgstr "Sertifikat tidak valid"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1368
|
#: ../js/ui/components/telepathyClient.js:1372
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Koneksi telah ditolak"
|
msgstr "Koneksi telah ditolak"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1370
|
#: ../js/ui/components/telepathyClient.js:1374
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Koneksi tak dapat dijalin"
|
msgstr "Koneksi tak dapat dijalin"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1372
|
#: ../js/ui/components/telepathyClient.js:1376
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Koneksi telah terputus"
|
msgstr "Koneksi telah terputus"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1374
|
#: ../js/ui/components/telepathyClient.js:1378
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Akun ini telah tersambung pada server"
|
msgstr "Akun ini telah tersambung pada server"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1376
|
#: ../js/ui/components/telepathyClient.js:1380
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Koneksi telah digantikan oleh koneksi baru memakai sumberdaya yang sama"
|
"Koneksi telah digantikan oleh koneksi baru memakai sumberdaya yang sama"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1378
|
#: ../js/ui/components/telepathyClient.js:1382
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Akun ini sudah ada di server"
|
msgstr "Akun ini sudah ada di server"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1380
|
#: ../js/ui/components/telepathyClient.js:1384
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Server kini terlalu sibuk untuk menangani koneksi"
|
msgstr "Server kini terlalu sibuk untuk menangani koneksi"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1382
|
#: ../js/ui/components/telepathyClient.js:1386
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Sertifikat telah dicabut"
|
msgstr "Sertifikat telah dicabut"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1384
|
#: ../js/ui/components/telepathyClient.js:1388
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sertifikat memakai algorima cipher yang tak aman atau lemah secara "
|
"Sertifikat memakai algorima cipher yang tak aman atau lemah secara "
|
||||||
"kriptografi"
|
"kriptografi"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1386
|
#: ../js/ui/components/telepathyClient.js:1390
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -959,22 +959,22 @@ msgstr ""
|
|||||||
"Panjang sertifikat server, atau kedalaman rantai sertifikat server, "
|
"Panjang sertifikat server, atau kedalaman rantai sertifikat server, "
|
||||||
"melampaui batas yang diberlakukan oleh pustaka kriptografi"
|
"melampaui batas yang diberlakukan oleh pustaka kriptografi"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1388
|
#: ../js/ui/components/telepathyClient.js:1392
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Galat internal"
|
msgstr "Galat internal"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example. */
|
#. * name@jabber.org for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1398
|
#: ../js/ui/components/telepathyClient.js:1402
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Unable to connect to %s"
|
msgid "Unable to connect to %s"
|
||||||
msgstr "Tak bisa menyambung ke %s"
|
msgstr "Tak bisa menyambung ke %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1403
|
#: ../js/ui/components/telepathyClient.js:1407
|
||||||
msgid "View account"
|
msgid "View account"
|
||||||
msgstr "Tilik akun"
|
msgstr "Tilik akun"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1440
|
#: ../js/ui/components/telepathyClient.js:1444
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Alasan yang tidak diketahui"
|
msgstr "Alasan yang tidak diketahui"
|
||||||
|
|
||||||
@ -990,22 +990,22 @@ msgstr "Tampilkan Aplikasi"
|
|||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Dash"
|
msgstr "Dash"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:91
|
#: ../js/ui/dateMenu.js:97
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Buka Kalender"
|
msgstr "Buka Kalender"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:95
|
#: ../js/ui/dateMenu.js:101
|
||||||
msgid "Open Clocks"
|
msgid "Open Clocks"
|
||||||
msgstr "Buka Jam"
|
msgstr "Buka Jam"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:102
|
#: ../js/ui/dateMenu.js:108
|
||||||
msgid "Date & Time Settings"
|
msgid "Date & Time Settings"
|
||||||
msgstr "Pengaturan Waktu & Tanggal"
|
msgstr "Pengaturan Waktu & Tanggal"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/dateMenu.js:192
|
#: ../js/ui/dateMenu.js:205
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B %Y"
|
msgstr "%A, %e %B %Y"
|
||||||
|
|
||||||
@ -1122,13 +1122,13 @@ msgid "Other users are logged in."
|
|||||||
msgstr "Pengguna lain sedang log masuk."
|
msgstr "Pengguna lain sedang log masuk."
|
||||||
|
|
||||||
#. Translators: Remote here refers to a remote session, like a ssh login */
|
#. Translators: Remote here refers to a remote session, like a ssh login */
|
||||||
#: ../js/ui/endSessionDialog.js:618
|
#: ../js/ui/endSessionDialog.js:619
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s (remote)"
|
msgid "%s (remote)"
|
||||||
msgstr "%s (jarak jauh)"
|
msgstr "%s (jarak jauh)"
|
||||||
|
|
||||||
#. Translators: Console here refers to a tty like a VT console */
|
#. Translators: Console here refers to a tty like a VT console */
|
||||||
#: ../js/ui/endSessionDialog.js:621
|
#: ../js/ui/endSessionDialog.js:622
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s (console)"
|
msgid "%s (console)"
|
||||||
msgstr "%s (konsol)"
|
msgstr "%s (konsol)"
|
||||||
@ -1142,7 +1142,7 @@ msgstr "Pasang"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
|
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335
|
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Papan Ketik"
|
msgstr "Papan Ketik"
|
||||||
|
|
||||||
@ -1230,16 +1230,16 @@ msgstr "Tiada Pesan"
|
|||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Baki Pesan"
|
msgstr "Baki Pesan"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2962
|
#: ../js/ui/messageTray.js:2967
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informasi Sistem"
|
msgstr "Informasi Sistem"
|
||||||
|
|
||||||
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:425
|
#: ../js/ui/notificationDaemon.js:516 ../src/shell-app.c:425
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Tak dikenal"
|
msgstr "Tak dikenal"
|
||||||
|
|
||||||
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151
|
#: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1271,7 +1271,7 @@ msgstr "Keluar"
|
|||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktivitas"
|
msgstr "Aktivitas"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:914
|
#: ../js/ui/panel.js:915
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Bar Atas"
|
msgstr "Bar Atas"
|
||||||
|
|
||||||
@ -1284,7 +1284,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Ketikkan Perintah"
|
msgstr "Ketikkan Perintah"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:114
|
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Tutup"
|
msgstr "Tutup"
|
||||||
|
|
||||||
@ -1300,7 +1300,7 @@ msgid "%d new notification"
|
|||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
msgstr[0] "%d pemberitahuan baru"
|
msgstr[0] "%d pemberitahuan baru"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Kunci"
|
msgstr "Kunci"
|
||||||
|
|
||||||
@ -1308,19 +1308,19 @@ msgstr "Kunci"
|
|||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "GNOME perlu mengunci layar"
|
msgstr "GNOME perlu mengunci layar"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1309
|
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1312
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Tak bisa mengunci"
|
msgstr "Tak bisa mengunci"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1310
|
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1313
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Kunci diblokir oleh suatu aplikasi"
|
msgstr "Kunci diblokir oleh suatu aplikasi"
|
||||||
|
|
||||||
#: ../js/ui/search.js:603
|
#: ../js/ui/search.js:606
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Mencari…"
|
msgstr "Mencari…"
|
||||||
|
|
||||||
#: ../js/ui/search.js:649
|
#: ../js/ui/search.js:652
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Tak ada yang cocok."
|
msgstr "Tak ada yang cocok."
|
||||||
|
|
||||||
@ -1384,11 +1384,11 @@ msgstr "Tombol Pantul"
|
|||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Tombol Tetikus"
|
msgstr "Tombol Tetikus"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:143
|
#: ../js/ui/status/accessibility.js:144
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Kontras Tinggi"
|
msgstr "Kontras Tinggi"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:192
|
#: ../js/ui/status/accessibility.js:193
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Teks Besar"
|
msgstr "Teks Besar"
|
||||||
|
|
||||||
@ -1398,8 +1398,8 @@ msgstr "Bluetooth"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
||||||
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
||||||
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85
|
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
|
||||||
#: ../js/ui/status/rfkill.js:105
|
#: ../js/ui/status/rfkill.js:114
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
msgstr "Matikan"
|
msgstr "Matikan"
|
||||||
|
|
||||||
@ -1457,37 +1457,37 @@ msgstr "Tersambung"
|
|||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu) */
|
#. under NetworkManager's control (and thus cannot be used in the menu) */
|
||||||
#: ../js/ui/status/network.js:426
|
#: ../js/ui/status/network.js:426
|
||||||
msgid "unmanaged"
|
msgid "Unmanaged"
|
||||||
msgstr "tak dikelola"
|
msgstr "Tak Dikelola"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:428
|
#: ../js/ui/status/network.js:428
|
||||||
msgid "disconnecting..."
|
msgid "Disconnecting"
|
||||||
msgstr "memutus..."
|
msgstr "Memutus"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1362
|
#: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1254
|
||||||
msgid "connecting..."
|
msgid "Connecting"
|
||||||
msgstr "menghubungi..."
|
msgstr "Menyambung"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password */
|
#. Translators: this is for network connections that require some kind of key or password */
|
||||||
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1365
|
#: ../js/ui/status/network.js:437
|
||||||
msgid "authentication required"
|
msgid "Authentication required"
|
||||||
msgstr "diperlukan otentikasi"
|
msgstr "Diperlukan otentikasi"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing */
|
#. module, which is missing */
|
||||||
#: ../js/ui/status/network.js:445
|
#: ../js/ui/status/network.js:445
|
||||||
msgid "firmware missing"
|
msgid "Firmware missing"
|
||||||
msgstr "firmware hilang"
|
msgstr "Firmware hilang"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage */
|
#. is disabled by rfkill, or it has no coverage */
|
||||||
#: ../js/ui/status/network.js:449
|
#: ../js/ui/status/network.js:449
|
||||||
msgid "unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "tidak tersedia"
|
msgstr "Tak tersedia"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1367
|
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1646
|
||||||
msgid "connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "koneksi gagal"
|
msgstr "Koneksi gagal"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:467
|
#: ../js/ui/status/network.js:467
|
||||||
msgid "Wired Settings"
|
msgid "Wired Settings"
|
||||||
@ -1541,7 +1541,7 @@ msgstr "Pilih jaringan"
|
|||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Tiada Jaringan"
|
msgstr "Tiada Jaringan"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103
|
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "Pakai saklar perangkat keras untuk mematikan"
|
msgstr "Pakai saklar perangkat keras untuk mematikan"
|
||||||
|
|
||||||
@ -1561,11 +1561,20 @@ msgstr "Nyalakan"
|
|||||||
msgid "Hotspot Active"
|
msgid "Hotspot Active"
|
||||||
msgstr "Hotspot Aktif"
|
msgstr "Hotspot Aktif"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1254
|
#: ../js/ui/status/network.js:1362
|
||||||
msgid "Connecting"
|
msgid "connecting..."
|
||||||
msgstr "Menyambung"
|
msgstr "menghubungi..."
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88
|
#. Translators: this is for network connections that require some kind of key or password */
|
||||||
|
#: ../js/ui/status/network.js:1365
|
||||||
|
msgid "authentication required"
|
||||||
|
msgstr "diperlukan otentikasi"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:1367
|
||||||
|
msgid "connection failed"
|
||||||
|
msgstr "koneksi gagal"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Pengaturan Jaringan"
|
msgstr "Pengaturan Jaringan"
|
||||||
|
|
||||||
@ -1581,10 +1590,6 @@ msgstr "VPN"
|
|||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Manajer Jaringan"
|
msgstr "Manajer Jaringan"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1646
|
|
||||||
msgid "Connection failed"
|
|
||||||
msgstr "Koneksi gagal"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1647
|
#: ../js/ui/status/network.js:1647
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Aktivasi koneksi jaringan gagal"
|
msgstr "Aktivasi koneksi jaringan gagal"
|
||||||
@ -1619,31 +1624,31 @@ msgstr "UPS"
|
|||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Baterai"
|
msgstr "Baterai"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:82
|
#: ../js/ui/status/rfkill.js:83
|
||||||
msgid "Airplane Mode"
|
msgid "Airplane Mode"
|
||||||
msgstr "Mode Pesawat Terbang"
|
msgstr "Mode Pesawat Terbang"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:84
|
#: ../js/ui/status/rfkill.js:85
|
||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "Nyala"
|
msgstr "Nyala"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:317
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Ganti Pengguna"
|
msgstr "Ganti Pengguna"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:319
|
#: ../js/ui/status/system.js:322
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Keluar"
|
msgstr "Keluar"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:338
|
#: ../js/ui/status/system.js:341
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Kunci Orientasi"
|
msgstr "Kunci Orientasi"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:346
|
#: ../js/ui/status/system.js:349
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspensi"
|
msgstr "Suspensi"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:352
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Matikan"
|
msgstr "Matikan"
|
||||||
|
|
||||||
@ -1680,27 +1685,67 @@ msgstr "Cari"
|
|||||||
msgid "“%s” is ready"
|
msgid "“%s” is ready"
|
||||||
msgstr "'%s' siap"
|
msgstr "'%s' siap"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:56
|
#: ../js/ui/windowManager.js:57
|
||||||
msgid "Do you want to keep these display settings?"
|
msgid "Do you want to keep these display settings?"
|
||||||
msgstr "Apakah Anda ingin mempertahankan pengaturan tampilan ini?"
|
msgstr "Apakah Anda ingin mempertahankan pengaturan tampilan ini?"
|
||||||
|
|
||||||
#. Translators: this and the following message should be limited in lenght,
|
#. Translators: this and the following message should be limited in lenght,
|
||||||
#. to avoid ellipsizing the labels.
|
#. to avoid ellipsizing the labels.
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/windowManager.js:75
|
#: ../js/ui/windowManager.js:76
|
||||||
msgid "Revert Settings"
|
msgid "Revert Settings"
|
||||||
msgstr "Balikkan Tatanan"
|
msgstr "Balikkan Tatanan"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:79
|
#: ../js/ui/windowManager.js:80
|
||||||
msgid "Keep Changes"
|
msgid "Keep Changes"
|
||||||
msgstr "Simpan Perubahan"
|
msgstr "Simpan Perubahan"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:97
|
#: ../js/ui/windowManager.js:99
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Settings changes will revert in %d second"
|
msgid "Settings changes will revert in %d second"
|
||||||
msgid_plural "Settings changes will revert in %d seconds"
|
msgid_plural "Settings changes will revert in %d seconds"
|
||||||
msgstr[0] "Perubahan tatanan akan dikembalikan dalam %d detik"
|
msgstr[0] "Perubahan tatanan akan dikembalikan dalam %d detik"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:33
|
||||||
|
msgid "Minimize"
|
||||||
|
msgstr "Minimalkan"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:40
|
||||||
|
msgid "Unmaximize"
|
||||||
|
msgstr "Tak Maksimalkan"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:44
|
||||||
|
msgid "Maximize"
|
||||||
|
msgstr "Maksimalkan"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:51
|
||||||
|
msgid "Move"
|
||||||
|
msgstr "Pindah"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:57
|
||||||
|
msgid "Resize"
|
||||||
|
msgstr "Ubah Ukuran"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:64
|
||||||
|
msgid "Move Titlebar Onscreen"
|
||||||
|
msgstr "Pindahkan Bilah Judul Pada Layar"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:69
|
||||||
|
msgid "Always on Top"
|
||||||
|
msgstr "Selalu di Puncak"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:86
|
||||||
|
msgid "Always on Visible Workspace"
|
||||||
|
msgstr "Selalu pada Ruang Kerja yang Tampak"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:103
|
||||||
|
msgid "Move to Workspace Up"
|
||||||
|
msgstr "Pindah ke Ruang Kerja Atas"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:108
|
||||||
|
msgid "Move to Workspace Down"
|
||||||
|
msgstr "Pindah ke Ruang Kerja Bawah"
|
||||||
|
|
||||||
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
||||||
msgid "Evolution Calendar"
|
msgid "Evolution Calendar"
|
||||||
msgstr "Evolution Kalender"
|
msgstr "Evolution Kalender"
|
||||||
@ -1754,8 +1799,6 @@ msgstr "Sandi tidak cocok."
|
|||||||
msgid "Password cannot be blank"
|
msgid "Password cannot be blank"
|
||||||
msgstr "Sandi tidak boleh kosong"
|
msgstr "Sandi tidak boleh kosong"
|
||||||
|
|
||||||
#: ../src/shell-polkit-authentication-agent.c:343
|
#: ../src/shell-polkit-authentication-agent.c:346
|
||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Dialog otentikasi ditolak oleh pengguna"
|
msgstr "Dialog otentikasi ditolak oleh pengguna"
|
||||||
|
|
||||||
|
|
||||||
|
54
po/it.po
54
po/it.po
@ -11,8 +11,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2014-04-06 07:54+0000\n"
|
"POT-Creation-Date: 2014-05-27 19:20+0000\n"
|
||||||
"PO-Revision-Date: 2014-04-06 14:15+0100\n"
|
"PO-Revision-Date: 2014-05-31 14:54+0100\n"
|
||||||
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
||||||
"Language-Team: Italiano <tp@lists.linux.it>\n"
|
"Language-Team: Italiano <tp@lists.linux.it>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
@ -421,7 +421,7 @@ msgid "%s has been removed from your favorites."
|
|||||||
msgstr "%s è stato rimosso dai preferiti."
|
msgstr "%s è stato rimosso dai preferiti."
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809
|
||||||
#: ../js/ui/status/system.js:334
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Impostazioni"
|
msgstr "Impostazioni"
|
||||||
|
|
||||||
@ -1076,7 +1076,7 @@ msgstr[1] "Il sistema verrà spento automaticamente tra %d secondi."
|
|||||||
#: ../js/ui/endSessionDialog.js:93
|
#: ../js/ui/endSessionDialog.js:93
|
||||||
msgctxt "checkbox"
|
msgctxt "checkbox"
|
||||||
msgid "Install pending software updates"
|
msgid "Install pending software updates"
|
||||||
msgstr "Installa gli aggiornamenti software in sospeso"
|
msgstr "Installare gli aggiornamenti software in sospeso"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
|
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
@ -1130,7 +1130,7 @@ msgstr "Installa e spegni"
|
|||||||
#: ../js/ui/endSessionDialog.js:131
|
#: ../js/ui/endSessionDialog.js:131
|
||||||
msgctxt "checkbox"
|
msgctxt "checkbox"
|
||||||
msgid "Power off after updates are installed"
|
msgid "Power off after updates are installed"
|
||||||
msgstr "Spegne dopo aver installato gli aggiornamenti"
|
msgstr "Spegnere dopo aver installato gli aggiornamenti"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:315
|
#: ../js/ui/endSessionDialog.js:315
|
||||||
msgid "Running on battery power: please plug in before installing updates."
|
msgid "Running on battery power: please plug in before installing updates."
|
||||||
@ -1167,7 +1167,7 @@ msgstr "Installa"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Scaricare e installare «%s» da extensions.gnome.org?"
|
msgstr "Scaricare e installare «%s» da extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335
|
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:339
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastiera"
|
msgstr "Tastiera"
|
||||||
|
|
||||||
@ -1328,7 +1328,7 @@ msgid_plural "%d new notifications"
|
|||||||
msgstr[0] "%d nuova notifica"
|
msgstr[0] "%d nuova notifica"
|
||||||
msgstr[1] "%d nuove notifiche"
|
msgstr[1] "%d nuove notifiche"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Blocca"
|
msgstr "Blocca"
|
||||||
|
|
||||||
@ -1344,11 +1344,11 @@ msgstr "Impossibile bloccare"
|
|||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Il blocco è stato impedito da un'applicazione."
|
msgstr "Il blocco è stato impedito da un'applicazione."
|
||||||
|
|
||||||
#: ../js/ui/search.js:603
|
#: ../js/ui/search.js:606
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Ricerca…"
|
msgstr "Ricerca…"
|
||||||
|
|
||||||
#: ../js/ui/search.js:649
|
#: ../js/ui/search.js:652
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Nessun risultato."
|
msgstr "Nessun risultato."
|
||||||
|
|
||||||
@ -1427,8 +1427,8 @@ msgstr "Bluetooth"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
||||||
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
||||||
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85
|
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
|
||||||
#: ../js/ui/status/rfkill.js:105
|
#: ../js/ui/status/rfkill.js:114
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
msgstr "Spegni"
|
msgstr "Spegni"
|
||||||
|
|
||||||
@ -1451,7 +1451,7 @@ msgstr "Non collegato"
|
|||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
msgstr "Luminosità"
|
msgstr "Luminosità"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:403
|
#: ../js/ui/status/keyboard.js:407
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Mostra disposizione tastiera"
|
msgstr "Mostra disposizione tastiera"
|
||||||
|
|
||||||
@ -1461,15 +1461,13 @@ msgstr "Posizione"
|
|||||||
|
|
||||||
# (ndt) o disabilitata?
|
# (ndt) o disabilitata?
|
||||||
#: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
|
#: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
|
||||||
#| msgid "Disabled"
|
|
||||||
msgid "Disable"
|
msgid "Disable"
|
||||||
msgstr "Disabilitato"
|
msgstr "Disabilitato"
|
||||||
|
|
||||||
# (ndt) o abilitata?
|
# (ndt) o abilitata?
|
||||||
#: ../js/ui/status/location.js:165
|
#: ../js/ui/status/location.js:165
|
||||||
#| msgid "Enabled"
|
|
||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Abilitato"
|
msgstr "Abilita"
|
||||||
|
|
||||||
#: ../js/ui/status/location.js:167
|
#: ../js/ui/status/location.js:167
|
||||||
msgid "In Use"
|
msgid "In Use"
|
||||||
@ -1543,15 +1541,15 @@ msgstr "Usa come connessione a Internet"
|
|||||||
|
|
||||||
#: ../js/ui/status/network.js:776
|
#: ../js/ui/status/network.js:776
|
||||||
msgid "Airplane Mode is On"
|
msgid "Airplane Mode is On"
|
||||||
msgstr "La modalità aero è attiva"
|
msgstr "La modalità aereo è attiva"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:777
|
#: ../js/ui/status/network.js:777
|
||||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||||
msgstr "Il Wi-Fi è disabilitato quando la modalità aero è attiva"
|
msgstr "Il Wi-Fi è disabilitato quando la modalità aereo è attiva"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:778
|
#: ../js/ui/status/network.js:778
|
||||||
msgid "Turn Off Airplane Mode"
|
msgid "Turn Off Airplane Mode"
|
||||||
msgstr "Disattiva modalità aero"
|
msgstr "Disattiva modalità aereo"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:787
|
#: ../js/ui/status/network.js:787
|
||||||
msgid "Wi-Fi is Off"
|
msgid "Wi-Fi is Off"
|
||||||
@ -1577,7 +1575,7 @@ msgstr "Seleziona una rete"
|
|||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Nessuna rete"
|
msgstr "Nessuna rete"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103
|
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "Usare l'interruttore hardware per disattivare"
|
msgstr "Usare l'interruttore hardware per disattivare"
|
||||||
|
|
||||||
@ -1601,7 +1599,7 @@ msgstr "Hotspot attivo"
|
|||||||
msgid "Connecting"
|
msgid "Connecting"
|
||||||
msgstr "Connessione"
|
msgstr "Connessione"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88
|
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Impostazioni rete"
|
msgstr "Impostazioni rete"
|
||||||
|
|
||||||
@ -1656,31 +1654,31 @@ msgstr "UPS"
|
|||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Batteria"
|
msgstr "Batteria"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:82
|
#: ../js/ui/status/rfkill.js:83
|
||||||
msgid "Airplane Mode"
|
msgid "Airplane Mode"
|
||||||
msgstr "Modalità aero"
|
msgstr "Modalità aereo"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:84
|
#: ../js/ui/status/rfkill.js:85
|
||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "On"
|
msgstr "On"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:317
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambia utente"
|
msgstr "Cambia utente"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:319
|
#: ../js/ui/status/system.js:322
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Termina sessione"
|
msgstr "Termina sessione"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:338
|
#: ../js/ui/status/system.js:341
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Blocco orientazione"
|
msgstr "Blocco orientazione"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:346
|
#: ../js/ui/status/system.js:349
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Sospendi"
|
msgstr "Sospendi"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:352
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Spegni"
|
msgstr "Spegni"
|
||||||
|
|
||||||
|
347
po/pt_BR.po
347
po/pt_BR.po
@ -13,6 +13,7 @@
|
|||||||
# Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013.
|
# Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013.
|
||||||
# Fábio Nogueira <fnogueira@gnome.org>, 2014.
|
# Fábio Nogueira <fnogueira@gnome.org>, 2014.
|
||||||
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
|
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
|
||||||
|
# Georges Basile Stavracas Neto <georges.stavracas@gmail.com>, 2014.
|
||||||
# Enrico Nicoletto <liverig@gmail.com>, 2013, 2014.
|
# Enrico Nicoletto <liverig@gmail.com>, 2013, 2014.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -20,8 +21,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2014-04-26 19:26+0000\n"
|
"POT-Creation-Date: 2014-06-03 07:28+0000\n"
|
||||||
"PO-Revision-Date: 2014-04-26 19:12-0300\n"
|
"PO-Revision-Date: 2014-06-03 10:26-0300\n"
|
||||||
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
|
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
|
||||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
@ -29,7 +30,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
"X-Generator: Poedit 1.6.3\n"
|
"X-Generator: Poedit 1.6.5\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||||
@ -66,13 +67,12 @@ msgid "Window management and application launching"
|
|||||||
msgstr "Gerenciamento de janelas e lançador de aplicativos"
|
msgstr "Gerenciamento de janelas e lançador de aplicativos"
|
||||||
|
|
||||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
||||||
#: ../js/extensionPrefs/main.js:155
|
|
||||||
msgid "GNOME Shell Extension Preferences"
|
msgid "GNOME Shell Extension Preferences"
|
||||||
msgstr "Preferências de extensões do GNOME Shell"
|
msgstr "Preferências de extensões do Shell do GNOME"
|
||||||
|
|
||||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
|
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
|
||||||
msgid "Configure GNOME Shell Extensions"
|
msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "Configurar extensões do GNOME Shell"
|
msgstr "Configurar extensões do Shell do GNOME"
|
||||||
|
|
||||||
# Traduções do Xfce e da Microsoft usam compositor --Enrico
|
# Traduções do Xfce e da Microsoft usam compositor --Enrico
|
||||||
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
|
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
|
||||||
@ -285,47 +285,31 @@ msgstr ""
|
|||||||
"GNOME."
|
"GNOME."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "Arrangement of buttons on the titlebar"
|
|
||||||
msgstr "Organização dos botões na barra de título"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
|
||||||
msgid ""
|
|
||||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
|
||||||
"GNOME Shell."
|
|
||||||
msgstr ""
|
|
||||||
"Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
|
|
||||||
"executar o Shell do GNOME."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
|
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "Espaços de trabalho são gerenciados dinamicamente"
|
msgstr "Espaços de trabalho são gerenciados dinamicamente"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Espaços de trabalho apenas no monitor primário"
|
msgstr "Espaços de trabalho apenas no monitor primário"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
||||||
msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
|
msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:127
|
#: ../js/extensionPrefs/main.js:125
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:"
|
msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:167
|
#: ../js/extensionPrefs/main.js:157
|
||||||
msgid "Extension"
|
#| msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "Extensão"
|
msgid "GNOME Shell Extensions"
|
||||||
|
msgstr "Extensões do Shell do GNOME"
|
||||||
#: ../js/extensionPrefs/main.js:191
|
|
||||||
msgid "Select an extension to configure using the combobox above."
|
|
||||||
msgstr ""
|
|
||||||
"Selecione uma extensão para configurar usando a caixa de seleção abaixo."
|
|
||||||
|
|
||||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
||||||
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
||||||
@ -348,25 +332,25 @@ msgctxt "button"
|
|||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Entrar"
|
msgstr "Entrar"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:271
|
#: ../js/gdm/loginDialog.js:269
|
||||||
msgid "Choose Session"
|
msgid "Choose Session"
|
||||||
msgstr "Escolher sessão"
|
msgstr "Escolher sessão"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:431
|
#: ../js/gdm/loginDialog.js:429
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Não está listado?"
|
msgstr "Não está listado?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:616
|
#: ../js/gdm/loginDialog.js:614
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(ex.: usuário ou %s)"
|
msgstr "(ex.: usuário ou %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
|
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
|
||||||
#: ../js/ui/components/networkAgent.js:280
|
#: ../js/ui/components/networkAgent.js:280
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nome de usuário: "
|
msgstr "Nome de usuário: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:924
|
#: ../js/gdm/loginDialog.js:922
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Janela de sessão"
|
msgstr "Janela de sessão"
|
||||||
|
|
||||||
@ -391,30 +375,34 @@ msgstr "Não foi possível analisar comando:"
|
|||||||
msgid "Execution of “%s” failed:"
|
msgid "Execution of “%s” failed:"
|
||||||
msgstr "A execução de \"%s\" falhou:"
|
msgstr "A execução de \"%s\" falhou:"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:636
|
#: ../js/ui/appDisplay.js:640
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
msgstr "Aplicativos usados frequentemente vão aparecer aqui"
|
msgstr "Aplicativos usados frequentemente vão aparecer aqui"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:747
|
#: ../js/ui/appDisplay.js:751
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Frequente"
|
msgstr "Frequente"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:754
|
#: ../js/ui/appDisplay.js:758
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Todos"
|
msgstr "Todos"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1567
|
#: ../js/ui/appDisplay.js:1571
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nova janela"
|
msgstr "Nova janela"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1589 ../js/ui/dash.js:285
|
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Remover dos favoritos"
|
msgstr "Remover dos favoritos"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1595
|
#: ../js/ui/appDisplay.js:1599
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Adicionar aos favoritos"
|
msgstr "Adicionar aos favoritos"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:1608
|
||||||
|
msgid "Show Details"
|
||||||
|
msgstr "Mostrar detalhes"
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:87
|
#: ../js/ui/appFavorites.js:87
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
@ -426,7 +414,7 @@ msgid "%s has been removed from your favorites."
|
|||||||
msgstr "%s foi removido dos seus favoritos."
|
msgstr "%s foi removido dos seus favoritos."
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
|
||||||
#: ../js/ui/status/system.js:334
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Configurações"
|
msgstr "Configurações"
|
||||||
|
|
||||||
@ -437,14 +425,14 @@ msgstr "Alterar plano de fundo…"
|
|||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:64
|
#: ../js/ui/calendar.js:67
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "All Day"
|
msgid "All Day"
|
||||||
msgstr "Dia todo"
|
msgstr "Dia todo"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list, if 24h format,
|
#. Translators: Shown in calendar event list, if 24h format,
|
||||||
#. \u2236 is a ratio character, similar to : */
|
#. \u2236 is a ratio character, similar to : */
|
||||||
#: ../js/ui/calendar.js:70
|
#: ../js/ui/calendar.js:73
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
@ -452,7 +440,7 @@ msgstr "%H∶%M"
|
|||||||
#. Translators: Shown in calendar event list, if 12h format,
|
#. Translators: Shown in calendar event list, if 12h format,
|
||||||
#. \u2236 is a ratio character, similar to : and \u2009 is
|
#. \u2236 is a ratio character, similar to : and \u2009 is
|
||||||
#. a thin space */
|
#. a thin space */
|
||||||
#: ../js/ui/calendar.js:79
|
#: ../js/ui/calendar.js:82
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%l∶%M %p"
|
msgstr "%l∶%M %p"
|
||||||
@ -462,43 +450,43 @@ msgstr "%l∶%M %p"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:110
|
#: ../js/ui/calendar.js:113
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "D"
|
msgstr "D"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday */
|
#. Translators: Calendar grid abbreviation for Monday */
|
||||||
#: ../js/ui/calendar.js:112
|
#: ../js/ui/calendar.js:115
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday */
|
#. Translators: Calendar grid abbreviation for Tuesday */
|
||||||
#: ../js/ui/calendar.js:114
|
#: ../js/ui/calendar.js:117
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "T"
|
msgstr "T"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday */
|
#. Translators: Calendar grid abbreviation for Wednesday */
|
||||||
#: ../js/ui/calendar.js:116
|
#: ../js/ui/calendar.js:119
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "Q"
|
msgstr "Q"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday */
|
#. Translators: Calendar grid abbreviation for Thursday */
|
||||||
#: ../js/ui/calendar.js:118
|
#: ../js/ui/calendar.js:121
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Q"
|
msgstr "Q"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday */
|
#. Translators: Calendar grid abbreviation for Friday */
|
||||||
#: ../js/ui/calendar.js:120
|
#: ../js/ui/calendar.js:123
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday */
|
#. Translators: Calendar grid abbreviation for Saturday */
|
||||||
#: ../js/ui/calendar.js:122
|
#: ../js/ui/calendar.js:125
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
@ -509,89 +497,85 @@ msgstr "S"
|
|||||||
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
||||||
#. * both be 'T').
|
#. * both be 'T').
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/calendar.js:135
|
#: ../js/ui/calendar.js:138
|
||||||
msgctxt "list sunday"
|
msgctxt "list sunday"
|
||||||
msgid "Su"
|
msgid "Su"
|
||||||
msgstr "Dom"
|
msgstr "Dom"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Monday */
|
#. Translators: Event list abbreviation for Monday */
|
||||||
#: ../js/ui/calendar.js:137
|
#: ../js/ui/calendar.js:140
|
||||||
msgctxt "list monday"
|
msgctxt "list monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "Seg"
|
msgstr "Seg"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Tuesday */
|
#. Translators: Event list abbreviation for Tuesday */
|
||||||
#: ../js/ui/calendar.js:139
|
#: ../js/ui/calendar.js:142
|
||||||
msgctxt "list tuesday"
|
msgctxt "list tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Ter"
|
msgstr "Ter"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Wednesday */
|
#. Translators: Event list abbreviation for Wednesday */
|
||||||
#: ../js/ui/calendar.js:141
|
#: ../js/ui/calendar.js:144
|
||||||
msgctxt "list wednesday"
|
msgctxt "list wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "Qua"
|
msgstr "Qua"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Thursday */
|
#. Translators: Event list abbreviation for Thursday */
|
||||||
#: ../js/ui/calendar.js:143
|
#: ../js/ui/calendar.js:146
|
||||||
msgctxt "list thursday"
|
msgctxt "list thursday"
|
||||||
msgid "Th"
|
msgid "Th"
|
||||||
msgstr "Qui"
|
msgstr "Qui"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Friday */
|
#. Translators: Event list abbreviation for Friday */
|
||||||
#: ../js/ui/calendar.js:145
|
#: ../js/ui/calendar.js:148
|
||||||
msgctxt "list friday"
|
msgctxt "list friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "Sex"
|
msgstr "Sex"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Saturday */
|
#. Translators: Event list abbreviation for Saturday */
|
||||||
#: ../js/ui/calendar.js:147
|
#: ../js/ui/calendar.js:150
|
||||||
msgctxt "list saturday"
|
msgctxt "list saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Sab"
|
msgstr "Sab"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:390
|
#: ../js/ui/calendar.js:454
|
||||||
msgid "calendar:MY"
|
|
||||||
msgstr "calendar:MY"
|
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:450
|
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Mês anterior"
|
msgstr "Mês anterior"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:460
|
#: ../js/ui/calendar.js:464
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Próximo mês"
|
msgstr "Próximo mês"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events */
|
#. Translators: Text to show if there are no events */
|
||||||
#: ../js/ui/calendar.js:772
|
#: ../js/ui/calendar.js:775
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Nada agendado"
|
msgstr "Nada agendado"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
#. Translators: Shown on calendar heading when selected day occurs on current year */
|
||||||
#: ../js/ui/calendar.js:790
|
#: ../js/ui/calendar.js:793
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d de %B"
|
msgstr "%A, %d de %B"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
#. Translators: Shown on calendar heading when selected day occurs on different year */
|
||||||
#: ../js/ui/calendar.js:793
|
#: ../js/ui/calendar.js:796
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %d de %B de %Y"
|
msgstr "%A, %d de %B de %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:804
|
#: ../js/ui/calendar.js:807
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Hoje"
|
msgstr "Hoje"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:808
|
#: ../js/ui/calendar.js:811
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Amanhã"
|
msgstr "Amanhã"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:819
|
#: ../js/ui/calendar.js:822
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Esta semana"
|
msgstr "Esta semana"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:827
|
#: ../js/ui/calendar.js:830
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Próxima semana"
|
msgstr "Próxima semana"
|
||||||
|
|
||||||
@ -744,77 +728,77 @@ msgid "Mute"
|
|||||||
msgstr "Sem áudio"
|
msgstr "Sem áudio"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:958
|
#: ../js/ui/components/telepathyClient.js:957
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:965
|
#: ../js/ui/components/telepathyClient.js:964
|
||||||
msgid "Yesterday, %H∶%M"
|
msgid "Yesterday, %H∶%M"
|
||||||
msgstr "Ontem, %H∶%M"
|
msgstr "Ontem, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 24h format. i.e. "Monday, 14:30" */
|
#. string in 24h format. i.e. "Monday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:972
|
#: ../js/ui/components/telepathyClient.js:971
|
||||||
msgid "%A, %H∶%M"
|
msgid "%A, %H∶%M"
|
||||||
msgstr "%A, %H∶%M"
|
msgstr "%A, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 24h format.
|
#. followed by a time string in 24h format.
|
||||||
#. i.e. "May 25, 14:30" */
|
#. i.e. "May 25, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:979
|
#: ../js/ui/components/telepathyClient.js:978
|
||||||
msgid "%B %d, %H∶%M"
|
msgid "%B %d, %H∶%M"
|
||||||
msgstr "%d de %B, %H∶%M"
|
msgstr "%d de %B, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 24h format.
|
#. number followed by a time string in 24h format.
|
||||||
#. i.e. "May 25 2012, 14:30" */
|
#. i.e. "May 25 2012, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:985
|
#: ../js/ui/components/telepathyClient.js:984
|
||||||
msgid "%B %d %Y, %H∶%M"
|
msgid "%B %d %Y, %H∶%M"
|
||||||
msgstr "%d de %B de %Y, %H∶%M"
|
msgstr "%d de %B de %Y, %H∶%M"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:994
|
#: ../js/ui/components/telepathyClient.js:990
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%l∶%M %p"
|
msgstr "%l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1001
|
#: ../js/ui/components/telepathyClient.js:997
|
||||||
msgid "Yesterday, %l∶%M %p"
|
msgid "Yesterday, %l∶%M %p"
|
||||||
msgstr "Ontem, %l∶%M %p"
|
msgstr "Ontem, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1008
|
#: ../js/ui/components/telepathyClient.js:1004
|
||||||
msgid "%A, %l∶%M %p"
|
msgid "%A, %l∶%M %p"
|
||||||
msgstr "%A, %l∶%M %p"
|
msgstr "%A, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 12h format.
|
#. followed by a time string in 12h format.
|
||||||
#. i.e. "May 25, 2:30 pm" */
|
#. i.e. "May 25, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1015
|
#: ../js/ui/components/telepathyClient.js:1011
|
||||||
msgid "%B %d, %l∶%M %p"
|
msgid "%B %d, %l∶%M %p"
|
||||||
msgstr "%d de %B, %l∶%M %p"
|
msgstr "%d de %B, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 12h format.
|
#. number followed by a time string in 12h format.
|
||||||
#. i.e. "May 25 2012, 2:30 pm"*/
|
#. i.e. "May 25 2012, 2:30 pm"*/
|
||||||
#: ../js/ui/components/telepathyClient.js:1021
|
#: ../js/ui/components/telepathyClient.js:1017
|
||||||
msgid "%B %d %Y, %l∶%M %p"
|
msgid "%B %d %Y, %l∶%M %p"
|
||||||
msgstr "%d de %B de %Y, %l∶%M %p"
|
msgstr "%d de %B de %Y, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the other person changing their old IM name to their new
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name. */
|
#. IM name. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1054
|
#: ../js/ui/components/telepathyClient.js:1049
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s agora é conhecido como %s"
|
msgstr "%s agora é conhecido como %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example. */
|
#. * room@jabber.org for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1158
|
#: ../js/ui/components/telepathyClient.js:1153
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Convite para %s"
|
msgstr "Convite para %s"
|
||||||
@ -822,38 +806,38 @@ msgstr "Convite para %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. translators: first argument is the name of a contact and the second
|
||||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example. */
|
#. * for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1166
|
#: ../js/ui/components/telepathyClient.js:1161
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s está convidando você para participar de %s"
|
msgstr "%s está convidando você para participar de %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1168
|
#: ../js/ui/components/telepathyClient.js:1163
|
||||||
#: ../js/ui/components/telepathyClient.js:1203
|
#: ../js/ui/components/telepathyClient.js:1198
|
||||||
#: ../js/ui/components/telepathyClient.js:1237
|
#: ../js/ui/components/telepathyClient.js:1232
|
||||||
#: ../js/ui/components/telepathyClient.js:1295
|
#: ../js/ui/components/telepathyClient.js:1290
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Recusar"
|
msgstr "Recusar"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1174
|
#: ../js/ui/components/telepathyClient.js:1169
|
||||||
#: ../js/ui/components/telepathyClient.js:1243
|
#: ../js/ui/components/telepathyClient.js:1238
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1295
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Aceitar"
|
msgstr "Aceitar"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example. */
|
#. translators: argument is a contact name like Alice for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1193
|
#: ../js/ui/components/telepathyClient.js:1188
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Chamada de vídeo para %s"
|
msgstr "Chamada de vídeo para %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example. */
|
#. translators: argument is a contact name like Alice for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1196
|
#: ../js/ui/components/telepathyClient.js:1191
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Chamada de %s"
|
msgstr "Chamada de %s"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun */
|
#. translators: this is a button label (verb), not a noun */
|
||||||
#: ../js/ui/components/telepathyClient.js:1210
|
#: ../js/ui/components/telepathyClient.js:1205
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Atender"
|
msgstr "Atender"
|
||||||
|
|
||||||
@ -862,110 +846,110 @@ msgstr "Atender"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1231
|
#: ../js/ui/components/telepathyClient.js:1226
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s está enviando %s"
|
msgstr "%s está enviando %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias */
|
#. To translators: The parameter is the contact's alias */
|
||||||
#: ../js/ui/components/telepathyClient.js:1260
|
#: ../js/ui/components/telepathyClient.js:1255
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s quer permissão para vê-lo quando conectado"
|
msgstr "%s quer permissão para vê-lo quando conectado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1346
|
#: ../js/ui/components/telepathyClient.js:1341
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Erro de rede"
|
msgstr "Erro de rede"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1348
|
#: ../js/ui/components/telepathyClient.js:1343
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Falha de autenticação"
|
msgstr "Falha de autenticação"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1350
|
#: ../js/ui/components/telepathyClient.js:1345
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Erro de criptografia"
|
msgstr "Erro de criptografia"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1352
|
#: ../js/ui/components/telepathyClient.js:1347
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Certificado não fornecido"
|
msgstr "Certificado não fornecido"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1349
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Certificado não confiável"
|
msgstr "Certificado não confiável"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1356
|
#: ../js/ui/components/telepathyClient.js:1351
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Certificado expirado"
|
msgstr "Certificado expirado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1358
|
#: ../js/ui/components/telepathyClient.js:1353
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Certificado não ativado"
|
msgstr "Certificado não ativado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1360
|
#: ../js/ui/components/telepathyClient.js:1355
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Máquina do certificado não confere"
|
msgstr "Máquina do certificado não confere"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1362
|
#: ../js/ui/components/telepathyClient.js:1357
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Impressão digital do certificado não confere"
|
msgstr "Impressão digital do certificado não confere"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1359
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Certificado auto-assinado"
|
msgstr "Certificado auto-assinado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1366
|
#: ../js/ui/components/telepathyClient.js:1361
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "O status está definido como desconectado."
|
msgstr "O status está definido como desconectado."
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1368
|
#: ../js/ui/components/telepathyClient.js:1363
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Criptografia não disponível"
|
msgstr "Criptografia não disponível"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1370
|
#: ../js/ui/components/telepathyClient.js:1365
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "O certificado é inválido"
|
msgstr "O certificado é inválido"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1372
|
#: ../js/ui/components/telepathyClient.js:1367
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "A conexão foi recusada"
|
msgstr "A conexão foi recusada"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1374
|
#: ../js/ui/components/telepathyClient.js:1369
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "A conexão não pode ser estabelecida"
|
msgstr "A conexão não pode ser estabelecida"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1376
|
#: ../js/ui/components/telepathyClient.js:1371
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Conexão perdida"
|
msgstr "Conexão perdida"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1378
|
#: ../js/ui/components/telepathyClient.js:1373
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Esta conta já está conectada ao servidor"
|
msgstr "Esta conta já está conectada ao servidor"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1380
|
#: ../js/ui/components/telepathyClient.js:1375
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr "A conexão foi substituída por uma nova conexão usando o mesmo recurso"
|
msgstr "A conexão foi substituída por uma nova conexão usando o mesmo recurso"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1382
|
#: ../js/ui/components/telepathyClient.js:1377
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "A conta já existe no servidor"
|
msgstr "A conta já existe no servidor"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1384
|
#: ../js/ui/components/telepathyClient.js:1379
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "O servidor está atualmente muito ocupado para controlar a conexão"
|
msgstr "O servidor está atualmente muito ocupado para controlar a conexão"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1386
|
#: ../js/ui/components/telepathyClient.js:1381
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "O certificado foi revogado"
|
msgstr "O certificado foi revogado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1388
|
#: ../js/ui/components/telepathyClient.js:1383
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"O certificado usa um algoritmo de cifragem inseguro ou é criptograficamente "
|
"O certificado usa um algoritmo de cifragem inseguro ou é criptograficamente "
|
||||||
"fraco"
|
"fraco"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1390
|
#: ../js/ui/components/telepathyClient.js:1385
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@ -973,22 +957,22 @@ msgstr ""
|
|||||||
"O comprimento do certificado do servidor, ou a profundidade da cadeia do "
|
"O comprimento do certificado do servidor, ou a profundidade da cadeia do "
|
||||||
"certificado excedeu os limites impostos pela biblioteca de criptografia"
|
"certificado excedeu os limites impostos pela biblioteca de criptografia"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1392
|
#: ../js/ui/components/telepathyClient.js:1387
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Erro interno"
|
msgstr "Erro interno"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example. */
|
#. * name@jabber.org for example. */
|
||||||
#: ../js/ui/components/telepathyClient.js:1402
|
#: ../js/ui/components/telepathyClient.js:1397
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Unable to connect to %s"
|
msgid "Unable to connect to %s"
|
||||||
msgstr "Não foi possível conectar-se a %s"
|
msgstr "Não foi possível conectar-se a %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1407
|
#: ../js/ui/components/telepathyClient.js:1402
|
||||||
msgid "View account"
|
msgid "View account"
|
||||||
msgstr "Visualizar conta"
|
msgstr "Visualizar conta"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1444
|
#: ../js/ui/components/telepathyClient.js:1439
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Razão desconhecida"
|
msgstr "Razão desconhecida"
|
||||||
|
|
||||||
@ -1004,23 +988,23 @@ msgstr "Mostrar aplicativos"
|
|||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Dash"
|
msgstr "Dash"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:91
|
#: ../js/ui/dateMenu.js:97
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Abrir agenda"
|
msgstr "Abrir agenda"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:95
|
#: ../js/ui/dateMenu.js:101
|
||||||
msgid "Open Clocks"
|
msgid "Open Clocks"
|
||||||
msgstr "Abrir relógios"
|
msgstr "Abrir relógios"
|
||||||
|
|
||||||
# O "&" foi inserido como "e" para versão 3.8.0 no gnome-control-center
|
# O "&" foi inserido como "e" para versão 3.8.0 no gnome-control-center
|
||||||
#: ../js/ui/dateMenu.js:102
|
#: ../js/ui/dateMenu.js:108
|
||||||
msgid "Date & Time Settings"
|
msgid "Date & Time Settings"
|
||||||
msgstr "Configurações de data & hora"
|
msgstr "Configurações de data & hora"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/dateMenu.js:192
|
#: ../js/ui/dateMenu.js:205
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e de %B de %Y"
|
msgstr "%A, %e de %B de %Y"
|
||||||
|
|
||||||
@ -1165,7 +1149,7 @@ msgstr "Instalar"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?"
|
msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
|
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:339
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclado"
|
msgstr "Teclado"
|
||||||
|
|
||||||
@ -1262,7 +1246,7 @@ msgctxt "program"
|
|||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Desconhecido"
|
msgstr "Desconhecido"
|
||||||
|
|
||||||
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151
|
#: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@ -1299,7 +1283,7 @@ msgstr "Atividades"
|
|||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Barra superior"
|
msgstr "Barra superior"
|
||||||
|
|
||||||
#: ../js/ui/popupMenu.js:271
|
#: ../js/ui/popupMenu.js:279
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@ -1307,7 +1291,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Digite um comando"
|
msgstr "Digite um comando"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:114
|
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Fechar"
|
msgstr "Fechar"
|
||||||
|
|
||||||
@ -1324,7 +1308,7 @@ msgid_plural "%d new notifications"
|
|||||||
msgstr[0] "%d nova notificação"
|
msgstr[0] "%d nova notificação"
|
||||||
msgstr[1] "%d novas notificações"
|
msgstr[1] "%d novas notificações"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Bloquear"
|
msgstr "Bloquear"
|
||||||
|
|
||||||
@ -1422,8 +1406,8 @@ msgstr "Bluetooth"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
||||||
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
||||||
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85
|
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
|
||||||
#: ../js/ui/status/rfkill.js:105
|
#: ../js/ui/status/rfkill.js:114
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
msgstr "Desligar"
|
msgstr "Desligar"
|
||||||
|
|
||||||
@ -1446,7 +1430,7 @@ msgstr "Não conectado"
|
|||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
msgstr "Brilho"
|
msgstr "Brilho"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:403
|
#: ../js/ui/status/keyboard.js:407
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Exibir disposição de teclado"
|
msgstr "Exibir disposição de teclado"
|
||||||
|
|
||||||
@ -1483,12 +1467,10 @@ msgstr "Conectado"
|
|||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu) */
|
#. under NetworkManager's control (and thus cannot be used in the menu) */
|
||||||
#: ../js/ui/status/network.js:426
|
#: ../js/ui/status/network.js:426
|
||||||
#| msgid "unmanaged"
|
|
||||||
msgid "Unmanaged"
|
msgid "Unmanaged"
|
||||||
msgstr "Não gerenciável"
|
msgstr "Não gerenciável"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:428
|
#: ../js/ui/status/network.js:428
|
||||||
#| msgid "disconnecting..."
|
|
||||||
msgid "Disconnecting"
|
msgid "Disconnecting"
|
||||||
msgstr "Desconectando"
|
msgstr "Desconectando"
|
||||||
|
|
||||||
@ -1498,21 +1480,18 @@ msgstr "Conectando"
|
|||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password */
|
#. Translators: this is for network connections that require some kind of key or password */
|
||||||
#: ../js/ui/status/network.js:437
|
#: ../js/ui/status/network.js:437
|
||||||
#| msgid "authentication required"
|
|
||||||
msgid "Authentication required"
|
msgid "Authentication required"
|
||||||
msgstr "Autenticação necessária"
|
msgstr "Autenticação necessária"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing */
|
#. module, which is missing */
|
||||||
#: ../js/ui/status/network.js:445
|
#: ../js/ui/status/network.js:445
|
||||||
#| msgid "firmware missing"
|
|
||||||
msgid "Firmware missing"
|
msgid "Firmware missing"
|
||||||
msgstr "Firmware em falta"
|
msgstr "Firmware em falta"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage */
|
#. is disabled by rfkill, or it has no coverage */
|
||||||
#: ../js/ui/status/network.js:449
|
#: ../js/ui/status/network.js:449
|
||||||
#| msgid "unavailable"
|
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Indisponível"
|
msgstr "Indisponível"
|
||||||
|
|
||||||
@ -1572,7 +1551,7 @@ msgstr "Selecione uma rede"
|
|||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Nenhuma rede"
|
msgstr "Nenhuma rede"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103
|
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "Usar alternador de hardware para desligar"
|
msgstr "Usar alternador de hardware para desligar"
|
||||||
|
|
||||||
@ -1605,7 +1584,7 @@ msgstr "autenticação necessária"
|
|||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "conexão falhou"
|
msgstr "conexão falhou"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88
|
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Configurações de rede"
|
msgstr "Configurações de rede"
|
||||||
|
|
||||||
@ -1657,31 +1636,31 @@ msgstr "No-break"
|
|||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Bateria"
|
msgstr "Bateria"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:82
|
#: ../js/ui/status/rfkill.js:83
|
||||||
msgid "Airplane Mode"
|
msgid "Airplane Mode"
|
||||||
msgstr "Modo avião"
|
msgstr "Modo avião"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:84
|
#: ../js/ui/status/rfkill.js:85
|
||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "On"
|
msgstr "On"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:317
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Alternar usuário"
|
msgstr "Alternar usuário"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:319
|
#: ../js/ui/status/system.js:322
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Encerrar sessão"
|
msgstr "Encerrar sessão"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:338
|
#: ../js/ui/status/system.js:341
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Bloqueio da orientação"
|
msgstr "Bloqueio da orientação"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:346
|
#: ../js/ui/status/system.js:349
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspender"
|
msgstr "Suspender"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:352
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Desligar"
|
msgstr "Desligar"
|
||||||
|
|
||||||
@ -1718,28 +1697,68 @@ msgstr "Pesquisar"
|
|||||||
msgid "“%s” is ready"
|
msgid "“%s” is ready"
|
||||||
msgstr "\"%s\" está pronto"
|
msgstr "\"%s\" está pronto"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:56
|
#: ../js/ui/windowManager.js:57
|
||||||
msgid "Do you want to keep these display settings?"
|
msgid "Do you want to keep these display settings?"
|
||||||
msgstr "Você deseja manter essas configurações de exibição?"
|
msgstr "Você deseja manter essas configurações de exibição?"
|
||||||
|
|
||||||
#. Translators: this and the following message should be limited in lenght,
|
#. Translators: this and the following message should be limited in lenght,
|
||||||
#. to avoid ellipsizing the labels.
|
#. to avoid ellipsizing the labels.
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/windowManager.js:75
|
#: ../js/ui/windowManager.js:76
|
||||||
msgid "Revert Settings"
|
msgid "Revert Settings"
|
||||||
msgstr "Reverter configurações"
|
msgstr "Reverter configurações"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:79
|
#: ../js/ui/windowManager.js:80
|
||||||
msgid "Keep Changes"
|
msgid "Keep Changes"
|
||||||
msgstr "Manter alterações"
|
msgstr "Manter alterações"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:98
|
#: ../js/ui/windowManager.js:99
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Settings changes will revert in %d second"
|
msgid "Settings changes will revert in %d second"
|
||||||
msgid_plural "Settings changes will revert in %d seconds"
|
msgid_plural "Settings changes will revert in %d seconds"
|
||||||
msgstr[0] "Alterações nas configurações serão revertidas em %d segundo"
|
msgstr[0] "Alterações nas configurações serão revertidas em %d segundo"
|
||||||
msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
|
msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:34
|
||||||
|
msgid "Minimize"
|
||||||
|
msgstr "Minimizar"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:41
|
||||||
|
msgid "Unmaximize"
|
||||||
|
msgstr "Restaurar"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:45
|
||||||
|
msgid "Maximize"
|
||||||
|
msgstr "Maximizar"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:52
|
||||||
|
msgid "Move"
|
||||||
|
msgstr "Mover"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:58
|
||||||
|
msgid "Resize"
|
||||||
|
msgstr "Redimensionar"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:65
|
||||||
|
msgid "Move Titlebar Onscreen"
|
||||||
|
msgstr "Mover barra de título na tela"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:70
|
||||||
|
msgid "Always on Top"
|
||||||
|
msgstr "Sempre no topo"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:89
|
||||||
|
msgid "Always on Visible Workspace"
|
||||||
|
msgstr "Sempre na área de trabalho visível"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:106
|
||||||
|
msgid "Move to Workspace Up"
|
||||||
|
msgstr "Mover para a área de trabalho acima"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:111
|
||||||
|
msgid "Move to Workspace Down"
|
||||||
|
msgstr "Mover para a área de trabalho abaixo"
|
||||||
|
|
||||||
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
||||||
msgid "Evolution Calendar"
|
msgid "Evolution Calendar"
|
||||||
msgstr "Agenda do Evolution"
|
msgstr "Agenda do Evolution"
|
||||||
@ -1799,6 +1818,26 @@ msgstr "A senha não pode estar em branco"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "O diálogo de autenticação foi descartado pelo usuário"
|
msgstr "O diálogo de autenticação foi descartado pelo usuário"
|
||||||
|
|
||||||
|
#~ msgid "Arrangement of buttons on the titlebar"
|
||||||
|
#~ msgstr "Organização dos botões na barra de título"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
|
||||||
|
#~ "running GNOME Shell."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
|
||||||
|
#~ "executar o Shell do GNOME."
|
||||||
|
|
||||||
|
#~ msgid "Extension"
|
||||||
|
#~ msgstr "Extensão"
|
||||||
|
|
||||||
|
#~ msgid "Select an extension to configure using the combobox above."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Selecione uma extensão para configurar usando a caixa de seleção abaixo."
|
||||||
|
|
||||||
|
#~ msgid "calendar:MY"
|
||||||
|
#~ msgstr "calendar:MY"
|
||||||
|
|
||||||
#~ msgid "<b>%A</b>, <b>%H:%M</b>"
|
#~ msgid "<b>%A</b>, <b>%H:%M</b>"
|
||||||
#~ msgstr "<b>%A</b>, <b>%H:%M</b>"
|
#~ msgstr "<b>%A</b>, <b>%H:%M</b>"
|
||||||
|
|
||||||
|
@ -199,6 +199,21 @@ nodist_gnome_shell_extension_prefs_SOURCES = \
|
|||||||
gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags)
|
gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags)
|
||||||
gnome_shell_extension_prefs_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
|
gnome_shell_extension_prefs_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
|
||||||
|
|
||||||
|
if HAVE_NETWORKMANAGER
|
||||||
|
|
||||||
|
libexec_PROGRAMS += gnome-shell-portal-helper
|
||||||
|
gnome_shell_portal_helper_SOURCES = \
|
||||||
|
gnome-shell-portal-helper.c \
|
||||||
|
$(NULL)
|
||||||
|
nodist_gnome_shell_portal_helper_SOURCES = \
|
||||||
|
$(top_builddir)/js/js-resources.c \
|
||||||
|
$(top_builddir)/js/js-resources.h \
|
||||||
|
$(NULL)
|
||||||
|
gnome_shell_portal_helper_CPPFLAGS = $(gnome_shell_cflags)
|
||||||
|
gnome_shell_portal_helper_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
libgnome_shell_js_la_SOURCES = \
|
libgnome_shell_js_la_SOURCES = \
|
||||||
@ -320,7 +335,7 @@ INTROSPECTION_GIRS += ShellMenu-0.1.gir
|
|||||||
CLEANFILES += ShellMenu-0.1.gir
|
CLEANFILES += ShellMenu-0.1.gir
|
||||||
|
|
||||||
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
|
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
|
||||||
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4 GMenu-3.0
|
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4
|
||||||
if HAVE_NETWORKMANAGER
|
if HAVE_NETWORKMANAGER
|
||||||
Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0
|
Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0
|
||||||
endif
|
endif
|
||||||
|
@ -73,7 +73,15 @@ static void gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
|
|||||||
MetaRectangle *tile_rect,
|
MetaRectangle *tile_rect,
|
||||||
int tile_monitor);
|
int tile_monitor);
|
||||||
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
|
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
|
||||||
|
static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
int x,
|
||||||
|
int y);
|
||||||
|
static void gnome_shell_plugin_show_window_menu_for_rect (MetaPlugin *plugin,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect);
|
||||||
|
|
||||||
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||||
XEvent *event);
|
XEvent *event);
|
||||||
@ -140,6 +148,8 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
|||||||
|
|
||||||
plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview;
|
plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview;
|
||||||
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
|
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
|
||||||
|
plugin_class->show_window_menu = gnome_shell_plugin_show_window_menu;
|
||||||
|
plugin_class->show_window_menu_for_rect = gnome_shell_plugin_show_window_menu_for_rect;
|
||||||
|
|
||||||
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
||||||
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
|
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
|
||||||
@ -154,6 +164,45 @@ gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gnome_shell_plugin_has_swap_event (GnomeShellPlugin *shell_plugin)
|
||||||
|
{
|
||||||
|
MetaPlugin *plugin = META_PLUGIN (shell_plugin);
|
||||||
|
CoglDisplay *cogl_display =
|
||||||
|
cogl_context_get_display (shell_plugin->cogl_context);
|
||||||
|
CoglRenderer *renderer = cogl_display_get_renderer (cogl_display);
|
||||||
|
const char * (* query_extensions_string) (Display *dpy, int screen);
|
||||||
|
Bool (* query_extension) (Display *dpy, int *error, int *event);
|
||||||
|
MetaScreen *screen;
|
||||||
|
MetaDisplay *display;
|
||||||
|
Display *xdisplay;
|
||||||
|
const char *glx_extensions;
|
||||||
|
|
||||||
|
/* We will only get swap events if Cogl is using GLX */
|
||||||
|
if (cogl_renderer_get_winsys_id (renderer) != COGL_WINSYS_ID_GLX)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
screen = meta_plugin_get_screen (plugin);
|
||||||
|
display = meta_screen_get_display (screen);
|
||||||
|
|
||||||
|
xdisplay = meta_display_get_xdisplay (display);
|
||||||
|
|
||||||
|
query_extensions_string =
|
||||||
|
(void *) cogl_get_proc_address ("glXQueryExtensionsString");
|
||||||
|
query_extension =
|
||||||
|
(void *) cogl_get_proc_address ("glXQueryExtension");
|
||||||
|
|
||||||
|
query_extension (xdisplay,
|
||||||
|
&shell_plugin->glx_error_base,
|
||||||
|
&shell_plugin->glx_event_base);
|
||||||
|
|
||||||
|
glx_extensions =
|
||||||
|
query_extensions_string (xdisplay,
|
||||||
|
meta_screen_get_screen_number (screen));
|
||||||
|
|
||||||
|
return strstr (glx_extensions, "GLX_INTEL_swap_event") != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnome_shell_plugin_start (MetaPlugin *plugin)
|
gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||||
{
|
{
|
||||||
@ -166,7 +215,8 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
backend = clutter_get_default_backend ();
|
backend = clutter_get_default_backend ();
|
||||||
shell_plugin->cogl_context = clutter_backend_get_cogl_context (backend);
|
shell_plugin->cogl_context = clutter_backend_get_cogl_context (backend);
|
||||||
|
|
||||||
shell_plugin->have_swap_event = clutter_feature_available (CLUTTER_FEATURE_SWAP_EVENTS);
|
shell_plugin->have_swap_event =
|
||||||
|
gnome_shell_plugin_has_swap_event (shell_plugin);
|
||||||
|
|
||||||
shell_perf_log_define_event (shell_perf_log_get_default (),
|
shell_perf_log_define_event (shell_perf_log_get_default (),
|
||||||
"glx.swapComplete",
|
"glx.swapComplete",
|
||||||
@ -303,6 +353,25 @@ gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin)
|
|||||||
_shell_wm_hide_tile_preview (get_shell_wm ());
|
_shell_wm_hide_tile_preview (get_shell_wm ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
int x,
|
||||||
|
int y)
|
||||||
|
{
|
||||||
|
_shell_wm_show_window_menu (get_shell_wm (), window, menu, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnome_shell_plugin_show_window_menu_for_rect (MetaPlugin *plugin,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect)
|
||||||
|
{
|
||||||
|
_shell_wm_show_window_menu_for_rect (get_shell_wm (), window, menu, rect);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||||
XEvent *xev)
|
XEvent *xev)
|
||||||
|
52
src/gnome-shell-portal-helper.c
Normal file
52
src/gnome-shell-portal-helper.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <girepository.h>
|
||||||
|
#include <gjs/gjs.h>
|
||||||
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
const char *search_path[] = { "resource:///org/gnome/shell", NULL };
|
||||||
|
GError *error = NULL;
|
||||||
|
GjsContext *context;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||||
|
textdomain (GETTEXT_PACKAGE);
|
||||||
|
|
||||||
|
g_irepository_prepend_search_path (GNOME_SHELL_PKGLIBDIR);
|
||||||
|
|
||||||
|
context = g_object_new (GJS_TYPE_CONTEXT,
|
||||||
|
"search-path", search_path,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (!gjs_context_define_string_array(context, "ARGV",
|
||||||
|
argc, (const char**)argv,
|
||||||
|
&error))
|
||||||
|
{
|
||||||
|
g_message("Failed to define ARGV: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!gjs_context_eval (context,
|
||||||
|
"const Main = imports.portalHelper.main; Main.main(ARGV);",
|
||||||
|
-1,
|
||||||
|
"<main>",
|
||||||
|
&status,
|
||||||
|
&error))
|
||||||
|
{
|
||||||
|
g_message ("Execution of main.js threw exception: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -778,7 +778,7 @@ emit_changed_accels (GtkActionMuxer *muxer,
|
|||||||
/**
|
/**
|
||||||
* gtk_action_muxer_set_parent:
|
* gtk_action_muxer_set_parent:
|
||||||
* @muxer: a #GtkActionMuxer
|
* @muxer: a #GtkActionMuxer
|
||||||
* @parent: (allow-none): the new parent #GtkActionMuxer
|
* @parent: (nullable): the new parent #GtkActionMuxer
|
||||||
*
|
*
|
||||||
* Sets the parent of @muxer to @parent.
|
* Sets the parent of @muxer to @parent.
|
||||||
*/
|
*/
|
||||||
|
24
src/main.c
24
src/main.c
@ -34,6 +34,8 @@ extern GType gnome_shell_plugin_get_type (void);
|
|||||||
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
||||||
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
|
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
|
||||||
|
|
||||||
|
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
|
||||||
|
|
||||||
#define WM_NAME "GNOME Shell"
|
#define WM_NAME "GNOME Shell"
|
||||||
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
|
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
|
||||||
|
|
||||||
@ -167,6 +169,26 @@ shell_dbus_init (gboolean replace)
|
|||||||
g_object_unref (session);
|
g_object_unref (session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_prefs_init (void)
|
||||||
|
{
|
||||||
|
ShellGlobal *global = shell_global_get ();
|
||||||
|
GSettings *settings = shell_global_get_overrides_settings (global);
|
||||||
|
char **keys, **k, *schema_id;
|
||||||
|
|
||||||
|
if (!settings)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_object_get (G_OBJECT (settings), "schema-id", &schema_id, NULL);
|
||||||
|
|
||||||
|
keys = g_settings_list_keys (settings);
|
||||||
|
for (keys = k = g_settings_list_keys (settings); *k; k++)
|
||||||
|
meta_prefs_override_preference_schema (*k, schema_id);
|
||||||
|
|
||||||
|
g_strfreev (keys);
|
||||||
|
g_free (schema_id);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shell_introspection_init (void)
|
shell_introspection_init (void)
|
||||||
{
|
{
|
||||||
@ -434,6 +456,8 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
_shell_global_init ("session-mode", session_mode, NULL);
|
_shell_global_init ("session-mode", session_mode, NULL);
|
||||||
|
|
||||||
|
shell_prefs_init ();
|
||||||
|
|
||||||
ecode = meta_run ();
|
ecode = meta_run ();
|
||||||
|
|
||||||
if (g_getenv ("GNOME_SHELL_ENABLE_CLEANUP"))
|
if (g_getenv ("GNOME_SHELL_ENABLE_CLEANUP"))
|
||||||
|
@ -252,7 +252,7 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
|
|||||||
/**
|
/**
|
||||||
* shell_app_system_lookup_desktop_wmclass:
|
* shell_app_system_lookup_desktop_wmclass:
|
||||||
* @system: a #ShellAppSystem
|
* @system: a #ShellAppSystem
|
||||||
* @wmclass: (allow-none): A WM_CLASS value
|
* @wmclass: (nullable): A WM_CLASS value
|
||||||
*
|
*
|
||||||
* Find a valid application whose .desktop file, without the extension
|
* Find a valid application whose .desktop file, without the extension
|
||||||
* and properly canonicalized, matches @wmclass.
|
* and properly canonicalized, matches @wmclass.
|
||||||
@ -303,7 +303,7 @@ shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
|
|||||||
/**
|
/**
|
||||||
* shell_app_system_lookup_startup_wmclass:
|
* shell_app_system_lookup_startup_wmclass:
|
||||||
* @system: a #ShellAppSystem
|
* @system: a #ShellAppSystem
|
||||||
* @wmclass: (allow-none): A WM_CLASS value
|
* @wmclass: (nullable): A WM_CLASS value
|
||||||
*
|
*
|
||||||
* Find a valid application whose .desktop file contains a
|
* Find a valid application whose .desktop file contains a
|
||||||
* StartupWMClass entry matching @wmclass.
|
* StartupWMClass entry matching @wmclass.
|
||||||
|
@ -516,7 +516,7 @@ find_most_recent_transient_on_same_workspace (MetaDisplay *display,
|
|||||||
/**
|
/**
|
||||||
* shell_app_activate_window:
|
* shell_app_activate_window:
|
||||||
* @app: a #ShellApp
|
* @app: a #ShellApp
|
||||||
* @window: (allow-none): Window to be focused
|
* @window: (nullable): Window to be focused
|
||||||
* @timestamp: Event timestamp
|
* @timestamp: Event timestamp
|
||||||
*
|
*
|
||||||
* Bring all windows for the given app to the foreground,
|
* Bring all windows for the given app to the foreground,
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -286,7 +285,33 @@ shell_global_init (ShellGlobal *global)
|
|||||||
|
|
||||||
if (shell_js)
|
if (shell_js)
|
||||||
{
|
{
|
||||||
|
int i, j;
|
||||||
search_path = g_strsplit (shell_js, ":", -1);
|
search_path = g_strsplit (shell_js, ":", -1);
|
||||||
|
|
||||||
|
/* The naive g_strsplit above will split 'resource:///foo/bar' into 'resource',
|
||||||
|
* '///foo/bar'. Combine these back together by looking for a literal 'resource'
|
||||||
|
* in the array. */
|
||||||
|
for (i = 0, j = 0; search_path[i];)
|
||||||
|
{
|
||||||
|
char *out;
|
||||||
|
|
||||||
|
if (strcmp (search_path[i], "resource") == 0 && search_path[i + 1] != NULL)
|
||||||
|
{
|
||||||
|
out = g_strconcat (search_path[i], ":", search_path[i + 1], NULL);
|
||||||
|
g_free (search_path[i]);
|
||||||
|
g_free (search_path[i + 1]);
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out = search_path[i];
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
search_path[j++] = out;
|
||||||
|
}
|
||||||
|
|
||||||
|
search_path[j] = NULL; /* NULL-terminate the now possibly shorter array */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1130,28 +1155,19 @@ shell_global_reexec_self (ShellGlobal *global)
|
|||||||
{
|
{
|
||||||
GPtrArray *arr;
|
GPtrArray *arr;
|
||||||
gsize len;
|
gsize len;
|
||||||
|
|
||||||
|
#if defined __linux__
|
||||||
char *buf;
|
char *buf;
|
||||||
char *buf_p;
|
char *buf_p;
|
||||||
char *buf_end;
|
char *buf_end;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
#if defined __linux__
|
|
||||||
if (!g_file_get_contents ("/proc/self/cmdline", &buf, &len, &error))
|
if (!g_file_get_contents ("/proc/self/cmdline", &buf, &len, &error))
|
||||||
{
|
{
|
||||||
g_warning ("failed to get /proc/self/cmdline: %s", error->message);
|
g_warning ("failed to get /proc/self/cmdline: %s", error->message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#elif defined __OpenBSD__
|
|
||||||
int pid = getpid();
|
|
||||||
int mib[] = { CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_ARGV };
|
|
||||||
if (sysctl(mib, G_N_ELEMENTS (mib), &buf, &len, NULL, 0) == -1) {
|
|
||||||
g_warning ("failed to get command line args: %d", errno);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
buf_end = buf+len;
|
buf_end = buf+len;
|
||||||
arr = g_ptr_array_new ();
|
arr = g_ptr_array_new ();
|
||||||
/* The cmdline file is NUL-separated */
|
/* The cmdline file is NUL-separated */
|
||||||
@ -1159,6 +1175,30 @@ shell_global_reexec_self (ShellGlobal *global)
|
|||||||
g_ptr_array_add (arr, buf_p);
|
g_ptr_array_add (arr, buf_p);
|
||||||
|
|
||||||
g_ptr_array_add (arr, NULL);
|
g_ptr_array_add (arr, NULL);
|
||||||
|
#elif defined __OpenBSD__
|
||||||
|
gchar **args, **args_p;
|
||||||
|
gint mib[] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV };
|
||||||
|
|
||||||
|
if (sysctl (mib, G_N_ELEMENTS (mib), NULL, &len, NULL, 0) == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
args = g_malloc0 (len);
|
||||||
|
|
||||||
|
if (sysctl (mib, G_N_ELEMENTS (mib), args, &len, NULL, 0) == -1) {
|
||||||
|
g_warning ("failed to get command line args: %d", errno);
|
||||||
|
g_free (args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
arr = g_ptr_array_new ();
|
||||||
|
for (args_p = args; *args_p != NULL; args_p++) {
|
||||||
|
g_ptr_array_add (arr, *args_p);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_ptr_array_add (arr, NULL);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Close all file descriptors other than stdin/stdout/stderr, otherwise
|
/* Close all file descriptors other than stdin/stdout/stderr, otherwise
|
||||||
* they will leak and stay open after the exec. In particular, this is
|
* they will leak and stay open after the exec. In particular, this is
|
||||||
@ -1174,6 +1214,11 @@ shell_global_reexec_self (ShellGlobal *global)
|
|||||||
execvp (arr->pdata[0], (char**)arr->pdata);
|
execvp (arr->pdata[0], (char**)arr->pdata);
|
||||||
g_warning ("failed to reexec: %s", g_strerror (errno));
|
g_warning ("failed to reexec: %s", g_strerror (errno));
|
||||||
g_ptr_array_free (arr, TRUE);
|
g_ptr_array_free (arr, TRUE);
|
||||||
|
#if defined __linux__
|
||||||
|
g_free (buf);
|
||||||
|
#elif defined __OpenBSD__
|
||||||
|
g_free (args);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1310,6 +1355,37 @@ shell_global_get_settings (ShellGlobal *global)
|
|||||||
return global->settings;
|
return global->settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_global_get_overrides_settings:
|
||||||
|
* @global: A #ShellGlobal
|
||||||
|
*
|
||||||
|
* Get the session overrides GSettings instance.
|
||||||
|
*
|
||||||
|
* Return value: (transfer none): The GSettings object
|
||||||
|
*/
|
||||||
|
GSettings *
|
||||||
|
shell_global_get_overrides_settings (ShellGlobal *global)
|
||||||
|
{
|
||||||
|
static GSettings *settings = NULL;
|
||||||
|
const char *schema;
|
||||||
|
|
||||||
|
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
|
||||||
|
|
||||||
|
if (!settings)
|
||||||
|
{
|
||||||
|
if (strcmp (global->session_mode, "classic") == 0)
|
||||||
|
schema = "org.gnome.shell.extensions.classic-overrides";
|
||||||
|
else if (strcmp (global->session_mode, "user") == 0)
|
||||||
|
schema = "org.gnome.shell.overrides";
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
settings = g_settings_new (schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_global_get_current_time:
|
* shell_global_get_current_time:
|
||||||
* @global: A #ShellGlobal
|
* @global: A #ShellGlobal
|
||||||
@ -1557,7 +1633,7 @@ build_ca_proplist_for_event (ca_proplist *props,
|
|||||||
* @global: the #ShellGlobal
|
* @global: the #ShellGlobal
|
||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @name: the sound name
|
* @name: the sound name
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
*
|
*
|
||||||
* Plays a simple sound picked according to Freedesktop sound theme.
|
* Plays a simple sound picked according to Freedesktop sound theme.
|
||||||
* Really just a workaround for libcanberra not being introspected.
|
* Really just a workaround for libcanberra not being introspected.
|
||||||
@ -1585,7 +1661,7 @@ shell_global_play_theme_sound (ShellGlobal *global,
|
|||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @name: the sound name
|
* @name: the sound name
|
||||||
* @description: the localized description of the event that triggered this alert
|
* @description: the localized description of the event that triggered this alert
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
* @application_id: application on behalf of which the sound is played
|
* @application_id: application on behalf of which the sound is played
|
||||||
* @application_name:
|
* @application_name:
|
||||||
*
|
*
|
||||||
@ -1619,7 +1695,7 @@ shell_global_play_theme_sound_full (ShellGlobal *global,
|
|||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @file_name: the file name to play
|
* @file_name: the file name to play
|
||||||
* @description: the localized description of the event that triggered this alert
|
* @description: the localized description of the event that triggered this alert
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
* @application_id: application on behalf of which the sound is played
|
* @application_id: application on behalf of which the sound is played
|
||||||
* @application_name:
|
* @application_name:
|
||||||
*
|
*
|
||||||
@ -1653,7 +1729,7 @@ shell_global_play_sound_file_full (ShellGlobal *global,
|
|||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @file_name: the file name to play
|
* @file_name: the file name to play
|
||||||
* @description: the localized description of the event that triggered this alert
|
* @description: the localized description of the event that triggered this alert
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
*
|
*
|
||||||
* Like shell_global_play_theme_sound(), but with an explicit path
|
* Like shell_global_play_theme_sound(), but with an explicit path
|
||||||
* instead of a themed sound.
|
* instead of a themed sound.
|
||||||
@ -1814,7 +1890,7 @@ load_variant (GFile *dir,
|
|||||||
* shell_global_set_runtime_state:
|
* shell_global_set_runtime_state:
|
||||||
* @global: a #ShellGlobal
|
* @global: a #ShellGlobal
|
||||||
* @property_name: Name of the property
|
* @property_name: Name of the property
|
||||||
* @variant: (allow-none): A #GVariant, or %NULL to unset
|
* @variant: (nullable): A #GVariant, or %NULL to unset
|
||||||
*
|
*
|
||||||
* Change the value of serialized runtime state.
|
* Change the value of serialized runtime state.
|
||||||
*/
|
*/
|
||||||
@ -1849,7 +1925,7 @@ shell_global_get_runtime_state (ShellGlobal *global,
|
|||||||
* shell_global_set_persistent_state:
|
* shell_global_set_persistent_state:
|
||||||
* @global: a #ShellGlobal
|
* @global: a #ShellGlobal
|
||||||
* @property_name: Name of the property
|
* @property_name: Name of the property
|
||||||
* @variant: (allow-none): A #GVariant, or %NULL to unset
|
* @variant: (nullable): A #GVariant, or %NULL to unset
|
||||||
*
|
*
|
||||||
* Change the value of serialized persistent state.
|
* Change the value of serialized persistent state.
|
||||||
*/
|
*/
|
||||||
|
@ -35,6 +35,7 @@ GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
|
|||||||
MetaDisplay *shell_global_get_display (ShellGlobal *global);
|
MetaDisplay *shell_global_get_display (ShellGlobal *global);
|
||||||
GList *shell_global_get_window_actors (ShellGlobal *global);
|
GList *shell_global_get_window_actors (ShellGlobal *global);
|
||||||
GSettings *shell_global_get_settings (ShellGlobal *global);
|
GSettings *shell_global_get_settings (ShellGlobal *global);
|
||||||
|
GSettings *shell_global_get_overrides_settings (ShellGlobal *global);
|
||||||
guint32 shell_global_get_current_time (ShellGlobal *global);
|
guint32 shell_global_get_current_time (ShellGlobal *global);
|
||||||
|
|
||||||
|
|
||||||
|
@ -516,7 +516,7 @@ shell_keyring_prompt_new (void)
|
|||||||
*
|
*
|
||||||
* Get the prompt password text actor
|
* Get the prompt password text actor
|
||||||
*
|
*
|
||||||
* Returns: (transfer none) (allow-none): the password actor
|
* Returns: (transfer none) (nullable): the password actor
|
||||||
*/
|
*/
|
||||||
ClutterText *
|
ClutterText *
|
||||||
shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
|
shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
|
||||||
@ -531,7 +531,7 @@ shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
|
|||||||
*
|
*
|
||||||
* Get the prompt password text actor
|
* Get the prompt password text actor
|
||||||
*
|
*
|
||||||
* Returns: (transfer none) (allow-none): the password actor
|
* Returns: (transfer none) (nullable): the password actor
|
||||||
*/
|
*/
|
||||||
ClutterText *
|
ClutterText *
|
||||||
shell_keyring_prompt_get_confirm_actor (ShellKeyringPrompt *self)
|
shell_keyring_prompt_get_confirm_actor (ShellKeyringPrompt *self)
|
||||||
@ -616,7 +616,7 @@ on_password_changed (ClutterText *text,
|
|||||||
/**
|
/**
|
||||||
* shell_keyring_prompt_set_password_actor:
|
* shell_keyring_prompt_set_password_actor:
|
||||||
* @self: the internal prompt
|
* @self: the internal prompt
|
||||||
* @password_actor: (allow-none): the password actor
|
* @password_actor: (nullable): the password actor
|
||||||
*
|
*
|
||||||
* Set the prompt password text actor
|
* Set the prompt password text actor
|
||||||
*/
|
*/
|
||||||
@ -651,7 +651,7 @@ shell_keyring_prompt_set_password_actor (ShellKeyringPrompt *self,
|
|||||||
/**
|
/**
|
||||||
* shell_keyring_prompt_set_confirm_actor:
|
* shell_keyring_prompt_set_confirm_actor:
|
||||||
* @self: the internal prompt
|
* @self: the internal prompt
|
||||||
* @confirm_actor: (allow-none): the confirm password actor
|
* @confirm_actor: (nullable): the confirm password actor
|
||||||
*
|
*
|
||||||
* Set the prompt password confirmation text actor
|
* Set the prompt password confirmation text actor
|
||||||
*/
|
*/
|
||||||
|
@ -64,7 +64,7 @@ shell_menu_tracker_remove_func (gint position,
|
|||||||
* shell_menu_tracker_new:
|
* shell_menu_tracker_new:
|
||||||
* @observable:
|
* @observable:
|
||||||
* @model:
|
* @model:
|
||||||
* @action_namespace: (allow-none):
|
* @action_namespace: (nullable):
|
||||||
* @insert_func:
|
* @insert_func:
|
||||||
* @insert_user_data:
|
* @insert_user_data:
|
||||||
* @insert_notify:
|
* @insert_notify:
|
||||||
|
@ -75,7 +75,7 @@ on_timeout (gpointer data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
establish_timeout ()
|
establish_timeout (void)
|
||||||
{
|
{
|
||||||
if (timeout_id != 0)
|
if (timeout_id != 0)
|
||||||
g_source_remove (timeout_id);
|
g_source_remove (timeout_id);
|
||||||
|
@ -14,9 +14,6 @@ struct _ShellRecorderSrc
|
|||||||
GMutex mutex_data;
|
GMutex mutex_data;
|
||||||
GMutex *mutex;
|
GMutex *mutex;
|
||||||
|
|
||||||
GstClock *clock;
|
|
||||||
GstClockTime last_frame_time;
|
|
||||||
|
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
GAsyncQueue *queue;
|
GAsyncQueue *queue;
|
||||||
gboolean closed;
|
gboolean closed;
|
||||||
@ -38,6 +35,7 @@ enum {
|
|||||||
/* Special marker value once the source is closed */
|
/* Special marker value once the source is closed */
|
||||||
#define RECORDER_QUEUE_END ((GstBuffer *)1)
|
#define RECORDER_QUEUE_END ((GstBuffer *)1)
|
||||||
|
|
||||||
|
#define shell_recorder_src_parent_class parent_class
|
||||||
G_DEFINE_TYPE(ShellRecorderSrc, shell_recorder_src, GST_TYPE_PUSH_SRC);
|
G_DEFINE_TYPE(ShellRecorderSrc, shell_recorder_src, GST_TYPE_PUSH_SRC);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -45,9 +43,7 @@ shell_recorder_src_init (ShellRecorderSrc *src)
|
|||||||
{
|
{
|
||||||
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
||||||
gst_base_src_set_live (GST_BASE_SRC (src), TRUE);
|
gst_base_src_set_live (GST_BASE_SRC (src), TRUE);
|
||||||
|
gst_base_src_set_do_timestamp (GST_BASE_SRC (src), TRUE);
|
||||||
src->clock = gst_system_clock_obtain ();
|
|
||||||
src->last_frame_time = 0;
|
|
||||||
|
|
||||||
src->queue = g_async_queue_new ();
|
src->queue = g_async_queue_new ();
|
||||||
src->mutex = &src->mutex_data;
|
src->mutex = &src->mutex_data;
|
||||||
@ -85,6 +81,39 @@ shell_recorder_src_update_memory_used (ShellRecorderSrc *src,
|
|||||||
g_mutex_unlock (src->mutex);
|
g_mutex_unlock (src->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* _negotiate() is called when we have to decide on a format. We
|
||||||
|
* use the configured format */
|
||||||
|
static gboolean
|
||||||
|
shell_recorder_src_negotiate (GstBaseSrc * base_src)
|
||||||
|
{
|
||||||
|
ShellRecorderSrc *src = SHELL_RECORDER_SRC (base_src);
|
||||||
|
gboolean result;
|
||||||
|
|
||||||
|
result = gst_base_src_set_caps (base_src, src->caps);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
shell_recorder_src_send_event (GstElement * element, GstEvent * event)
|
||||||
|
{
|
||||||
|
ShellRecorderSrc *src = SHELL_RECORDER_SRC (element);
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
|
case GST_EVENT_EOS:
|
||||||
|
shell_recorder_src_close (src);
|
||||||
|
gst_event_unref (event);
|
||||||
|
res = TRUE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element,
|
||||||
|
event), FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/* The create() virtual function is responsible for returning the next buffer.
|
/* The create() virtual function is responsible for returning the next buffer.
|
||||||
* We just pop buffers off of the queue and block if necessary.
|
* We just pop buffers off of the queue and block if necessary.
|
||||||
*/
|
*/
|
||||||
@ -100,9 +129,6 @@ shell_recorder_src_create (GstPushSrc *push_src,
|
|||||||
|
|
||||||
buffer = g_async_queue_pop (src->queue);
|
buffer = g_async_queue_pop (src->queue);
|
||||||
|
|
||||||
if (src->last_frame_time == 0)
|
|
||||||
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
|
|
||||||
|
|
||||||
if (buffer == RECORDER_QUEUE_END)
|
if (buffer == RECORDER_QUEUE_END)
|
||||||
{
|
{
|
||||||
/* Returning UNEXPECTED here will cause a EOS message to be sent */
|
/* Returning UNEXPECTED here will cause a EOS message to be sent */
|
||||||
@ -114,9 +140,6 @@ shell_recorder_src_create (GstPushSrc *push_src,
|
|||||||
- (int)(gst_buffer_get_size(buffer) / 1024));
|
- (int)(gst_buffer_get_size(buffer) / 1024));
|
||||||
|
|
||||||
*buffer_out = buffer;
|
*buffer_out = buffer;
|
||||||
GST_BUFFER_DURATION(*buffer_out) = GST_CLOCK_DIFF (src->last_frame_time, gst_clock_get_time (GST_CLOCK (src->clock)));
|
|
||||||
|
|
||||||
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
|
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
@ -158,8 +181,6 @@ shell_recorder_src_finalize (GObject *object)
|
|||||||
|
|
||||||
g_mutex_clear (src->mutex);
|
g_mutex_clear (src->mutex);
|
||||||
|
|
||||||
gst_object_unref (src->clock);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (shell_recorder_src_parent_class)->finalize (object);
|
G_OBJECT_CLASS (shell_recorder_src_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,6 +232,7 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
|
|||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||||
|
GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
|
||||||
GstPushSrcClass *push_src_class = GST_PUSH_SRC_CLASS (klass);
|
GstPushSrcClass *push_src_class = GST_PUSH_SRC_CLASS (klass);
|
||||||
|
|
||||||
static GstStaticPadTemplate src_template =
|
static GstStaticPadTemplate src_template =
|
||||||
@ -223,8 +245,6 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
|
|||||||
object_class->set_property = shell_recorder_src_set_property;
|
object_class->set_property = shell_recorder_src_set_property;
|
||||||
object_class->get_property = shell_recorder_src_get_property;
|
object_class->get_property = shell_recorder_src_get_property;
|
||||||
|
|
||||||
push_src_class->create = shell_recorder_src_create;
|
|
||||||
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_CAPS,
|
PROP_CAPS,
|
||||||
g_param_spec_boxed ("caps",
|
g_param_spec_boxed ("caps",
|
||||||
@ -247,6 +267,12 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
|
|||||||
"Generic/Src",
|
"Generic/Src",
|
||||||
"Feed screen capture data to a pipeline",
|
"Feed screen capture data to a pipeline",
|
||||||
"Owen Taylor <otaylor@redhat.com>");
|
"Owen Taylor <otaylor@redhat.com>");
|
||||||
|
|
||||||
|
element_class->send_event = shell_recorder_src_send_event;
|
||||||
|
|
||||||
|
base_src_class->negotiate = shell_recorder_src_negotiate;
|
||||||
|
|
||||||
|
push_src_class->create = shell_recorder_src_create;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -264,7 +290,6 @@ shell_recorder_src_add_buffer (ShellRecorderSrc *src,
|
|||||||
g_return_if_fail (SHELL_IS_RECORDER_SRC (src));
|
g_return_if_fail (SHELL_IS_RECORDER_SRC (src));
|
||||||
g_return_if_fail (src->caps != NULL);
|
g_return_if_fail (src->caps != NULL);
|
||||||
|
|
||||||
gst_base_src_set_caps (GST_BASE_SRC (src), src->caps);
|
|
||||||
shell_recorder_src_update_memory_used (src,
|
shell_recorder_src_update_memory_used (src,
|
||||||
(int)(gst_buffer_get_size(buffer) / 1024));
|
(int)(gst_buffer_get_size(buffer) / 1024));
|
||||||
|
|
||||||
|
@ -1059,8 +1059,6 @@ recorder_pipeline_set_caps (RecorderPipeline *pipeline)
|
|||||||
#else
|
#else
|
||||||
"format", G_TYPE_STRING, "xRGB",
|
"format", G_TYPE_STRING, "xRGB",
|
||||||
#endif
|
#endif
|
||||||
"bpp", G_TYPE_INT, 32,
|
|
||||||
"depth", G_TYPE_INT, 24,
|
|
||||||
"framerate", GST_TYPE_FRACTION, pipeline->recorder->framerate, 1,
|
"framerate", GST_TYPE_FRACTION, pipeline->recorder->framerate, 1,
|
||||||
"width", G_TYPE_INT, pipeline->recorder->area.width,
|
"width", G_TYPE_INT, pipeline->recorder->area.width,
|
||||||
"height", G_TYPE_INT, pipeline->recorder->area.height,
|
"height", G_TYPE_INT, pipeline->recorder->area.height,
|
||||||
@ -1543,8 +1541,8 @@ recorder_close_pipeline (ShellRecorder *recorder)
|
|||||||
* is written. The bus watch for the pipeline will get it and do
|
* is written. The bus watch for the pipeline will get it and do
|
||||||
* final cleanup
|
* final cleanup
|
||||||
*/
|
*/
|
||||||
shell_recorder_src_close (SHELL_RECORDER_SRC (recorder->current_pipeline->src));
|
gst_element_send_event (recorder->current_pipeline->pipeline,
|
||||||
|
gst_event_new_eos());
|
||||||
recorder->current_pipeline = NULL;
|
recorder->current_pipeline = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1629,7 +1627,7 @@ shell_recorder_set_draw_cursor (ShellRecorder *recorder,
|
|||||||
/**
|
/**
|
||||||
* shell_recorder_set_pipeline:
|
* shell_recorder_set_pipeline:
|
||||||
* @recorder: the #ShellRecorder
|
* @recorder: the #ShellRecorder
|
||||||
* @pipeline: (allow-none): the GStreamer pipeline used to encode recordings
|
* @pipeline: (nullable): the GStreamer pipeline used to encode recordings
|
||||||
* or %NULL for the default value.
|
* or %NULL for the default value.
|
||||||
*
|
*
|
||||||
* Sets the GStreamer pipeline used to encode recordings.
|
* Sets the GStreamer pipeline used to encode recordings.
|
||||||
@ -1681,7 +1679,7 @@ shell_recorder_set_area (ShellRecorder *recorder,
|
|||||||
/**
|
/**
|
||||||
* shell_recorder_record:
|
* shell_recorder_record:
|
||||||
* @recorder: the #ShellRecorder
|
* @recorder: the #ShellRecorder
|
||||||
* @filename_used: (out) (allow-none): actual filename used for recording
|
* @filename_used: (out) (optional): actual filename used for recording
|
||||||
*
|
*
|
||||||
* Starts recording, Starting the recording may fail if the output file
|
* Starts recording, Starting the recording may fail if the output file
|
||||||
* cannot be opened, or if the output stream cannot be created
|
* cannot be opened, or if the output stream cannot be created
|
||||||
|
@ -530,26 +530,15 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
|
|||||||
window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window));
|
window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window));
|
||||||
clutter_actor_get_position (window_actor, &actor_x, &actor_y);
|
clutter_actor_get_position (window_actor, &actor_x, &actor_y);
|
||||||
|
|
||||||
if (include_frame || !meta_window_get_frame (window))
|
meta_window_get_frame_rect (window, &rect);
|
||||||
{
|
|
||||||
meta_window_get_outer_rect (window, &rect);
|
|
||||||
|
|
||||||
screenshot_data->screenshot_area.x = rect.x;
|
if (!include_frame)
|
||||||
screenshot_data->screenshot_area.y = rect.y;
|
meta_window_frame_rect_to_client_rect (window, &rect, &rect);
|
||||||
|
|
||||||
clip.x = rect.x - (gint) actor_x;
|
screenshot_data->screenshot_area.x = rect.x;
|
||||||
clip.y = rect.y - (gint) actor_y;
|
screenshot_data->screenshot_area.y = rect.y;
|
||||||
}
|
clip.x = rect.x - (gint) actor_x;
|
||||||
else
|
clip.y = rect.y - (gint) actor_y;
|
||||||
{
|
|
||||||
rect = *meta_window_get_rect (window);
|
|
||||||
|
|
||||||
screenshot_data->screenshot_area.x = (gint) actor_x + rect.x;
|
|
||||||
screenshot_data->screenshot_area.y = (gint) actor_y + rect.y;
|
|
||||||
|
|
||||||
clip.x = rect.x;
|
|
||||||
clip.y = rect.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
clip.width = screenshot_data->screenshot_area.width = rect.width;
|
clip.width = screenshot_data->screenshot_area.width = rect.width;
|
||||||
clip.height = screenshot_data->screenshot_area.height = rect.height;
|
clip.height = screenshot_data->screenshot_area.height = rect.height;
|
||||||
|
@ -35,7 +35,7 @@ struct _ShellTpClientPrivate
|
|||||||
* if possible
|
* if possible
|
||||||
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
||||||
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
||||||
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL;
|
* @dispatch_operation: (nullable): a #TpChannelDispatchOperation or %NULL;
|
||||||
* the dispatch_operation is not guaranteed to be prepared
|
* the dispatch_operation is not guaranteed to be prepared
|
||||||
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
|
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
|
||||||
* #TpChannelRequest, all having their object-path defined but are not
|
* #TpChannelRequest, all having their object-path defined but are not
|
||||||
@ -54,7 +54,7 @@ struct _ShellTpClientPrivate
|
|||||||
* if possible
|
* if possible
|
||||||
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
||||||
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
||||||
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL;
|
* @dispatch_operation: (nullable): a #TpChannelDispatchOperation or %NULL;
|
||||||
* the dispatch_operation is not guaranteed to be prepared
|
* the dispatch_operation is not guaranteed to be prepared
|
||||||
* @context: a #TpAddDispatchOperationContext representing the context of this
|
* @context: a #TpAddDispatchOperationContext representing the context of this
|
||||||
* D-Bus call
|
* D-Bus call
|
||||||
|
@ -40,6 +40,15 @@ void _shell_wm_show_tile_preview (ShellWM *wm,
|
|||||||
MetaRectangle *tile_rect,
|
MetaRectangle *tile_rect,
|
||||||
int tile_monitor);
|
int tile_monitor);
|
||||||
void _shell_wm_hide_tile_preview (ShellWM *wm);
|
void _shell_wm_hide_tile_preview (ShellWM *wm);
|
||||||
|
void _shell_wm_show_window_menu (ShellWM *wm,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
int x,
|
||||||
|
int y);
|
||||||
|
void _shell_wm_show_window_menu_for_rect (ShellWM *wm,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect);
|
||||||
|
|
||||||
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
|
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
|
||||||
MetaKeyBinding *binding);
|
MetaKeyBinding *binding);
|
||||||
|
@ -28,6 +28,7 @@ enum
|
|||||||
KILL_WINDOW_EFFECTS,
|
KILL_WINDOW_EFFECTS,
|
||||||
SHOW_TILE_PREVIEW,
|
SHOW_TILE_PREVIEW,
|
||||||
HIDE_TILE_PREVIEW,
|
HIDE_TILE_PREVIEW,
|
||||||
|
SHOW_WINDOW_MENU,
|
||||||
FILTER_KEYBINDING,
|
FILTER_KEYBINDING,
|
||||||
CONFIRM_DISPLAY_CHANGE,
|
CONFIRM_DISPLAY_CHANGE,
|
||||||
|
|
||||||
@ -135,6 +136,13 @@ shell_wm_class_init (ShellWMClass *klass)
|
|||||||
0,
|
0,
|
||||||
NULL, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
|
shell_wm_signals[SHOW_WINDOW_MENU] =
|
||||||
|
g_signal_new ("show-window-menu",
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 3,
|
||||||
|
META_TYPE_WINDOW, G_TYPE_INT, META_TYPE_RECTANGLE);
|
||||||
shell_wm_signals[FILTER_KEYBINDING] =
|
shell_wm_signals[FILTER_KEYBINDING] =
|
||||||
g_signal_new ("filter-keybinding",
|
g_signal_new ("filter-keybinding",
|
||||||
G_TYPE_FROM_CLASS (klass),
|
G_TYPE_FROM_CLASS (klass),
|
||||||
@ -288,6 +296,30 @@ _shell_wm_hide_tile_preview (ShellWM *wm)
|
|||||||
g_signal_emit (wm, shell_wm_signals[HIDE_TILE_PREVIEW], 0);
|
g_signal_emit (wm, shell_wm_signals[HIDE_TILE_PREVIEW], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_shell_wm_show_window_menu (ShellWM *wm,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
int x,
|
||||||
|
int y)
|
||||||
|
{
|
||||||
|
MetaRectangle rect;
|
||||||
|
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = rect.height = 0;
|
||||||
|
|
||||||
|
_shell_wm_show_window_menu_for_rect (wm, window, menu, &rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_shell_wm_show_window_menu_for_rect (ShellWM *wm,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect)
|
||||||
|
{
|
||||||
|
g_signal_emit (wm, shell_wm_signals[SHOW_WINDOW_MENU], 0, window, menu, rect);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_shell_wm_minimize (ShellWM *wm,
|
_shell_wm_minimize (ShellWM *wm,
|
||||||
|
@ -414,7 +414,7 @@ st_bin_new (void)
|
|||||||
/**
|
/**
|
||||||
* st_bin_set_child:
|
* st_bin_set_child:
|
||||||
* @bin: a #StBin
|
* @bin: a #StBin
|
||||||
* @child: (allow-none): a #ClutterActor, or %NULL
|
* @child: (nullable): a #ClutterActor, or %NULL
|
||||||
*
|
*
|
||||||
* Sets @child as the child of @bin.
|
* Sets @child as the child of @bin.
|
||||||
*
|
*
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user