Compare commits
293 Commits
wip/maximi
...
3.19.4
Author | SHA1 | Date | |
---|---|---|---|
0044e225aa | |||
c25c143b24 | |||
b87da87252 | |||
f9258bb5e3 | |||
3d747b00e6 | |||
450345b4d0 | |||
7563e1ebcd | |||
f96cc4dd69 | |||
c65a9c4d2e | |||
c01bd37edc | |||
021cecbce2 | |||
2a0cb7ff05 | |||
0085a94706 | |||
5db38194dc | |||
2a26143149 | |||
62f22557aa | |||
516ea5a02e | |||
9154471aba | |||
fbf6746acf | |||
a36686a6aa | |||
fd837d74d1 | |||
fd57334395 | |||
85100cb65f | |||
c70f6278d6 | |||
e573441bac | |||
5ed9571b37 | |||
9d203ddc0f | |||
508a13ae72 | |||
c0b50cbdf2 | |||
06f78549bd | |||
67afd7a6d8 | |||
ffa8c2f2b1 | |||
3803a880e8 | |||
965aedb0bb | |||
80911535a7 | |||
ca401d5036 | |||
a1c091d98d | |||
e1e08f0a68 | |||
1a4f629554 | |||
4113be770b | |||
cf3f4850b8 | |||
14f374096a | |||
6fef5c37f7 | |||
6e7455aa1e | |||
03bf6fa399 | |||
f777e761c0 | |||
31201d9618 | |||
d95d78ac15 | |||
bef4f17c49 | |||
f4b7ab0cb6 | |||
a180dde01c | |||
385c918e2e | |||
d7401c8646 | |||
a456d5eb19 | |||
6c08799c7b | |||
8d7bb6496c | |||
f0496a2d3c | |||
6664553b7e | |||
2a950ca3b3 | |||
463cd6382c | |||
78db025b10 | |||
f3265c28a9 | |||
a6e5e459d3 | |||
9ba399bf18 | |||
a52c91e9e5 | |||
9a7b47c23f | |||
18f7d20006 | |||
3f0ee88657 | |||
c634718dfa | |||
df6b31de05 | |||
b8e29ae8c7 | |||
cdba8e5cea | |||
4fccdaafb7 | |||
df0b465e76 | |||
aacdd4fd5e | |||
5f68c3a324 | |||
8ceae3b054 | |||
3fc5afaff1 | |||
8b7464c648 | |||
3e602b1765 | |||
5858028411 | |||
2c682ace81 | |||
45f3106814 | |||
aa947f9948 | |||
0c72d1fcbd | |||
6d22670307 | |||
0b9e68e305 | |||
da8155cbe5 | |||
5b7a052e18 | |||
6f26e39082 | |||
489b96a310 | |||
e65d90d624 | |||
9c74e22313 | |||
48a1fce151 | |||
83e7f6f496 | |||
3c5c3a6597 | |||
1c3ea1649f | |||
48a54e8ac4 | |||
113a854048 | |||
882f5fa79e | |||
9acdb8012c | |||
731d64e0e4 | |||
ccf1bd9f27 | |||
c164a8fe03 | |||
1a39666f7c | |||
f2731d4d6a | |||
3e63fb7abe | |||
8b4249ef26 | |||
bf0be6ef12 | |||
294702d3f1 | |||
58f3b7c748 | |||
e25502aeb2 | |||
ffe4eaf00d | |||
2f88a7a1e1 | |||
cd7d564125 | |||
ede81017ec | |||
a539e6236a | |||
90b7710834 | |||
f8cc8f1dc1 | |||
f8e5e3e435 | |||
508e751ffd | |||
207c847762 | |||
3c980566d3 | |||
50b59e0ca6 | |||
14c52bb00a | |||
9720b32987 | |||
674ae262c8 | |||
db297e7fdb | |||
d57c146514 | |||
ec5a4328e3 | |||
e4ee72c481 | |||
31f1e9ff0a | |||
d6c049a8c9 | |||
44047ac881 | |||
464d5d8a13 | |||
29811a85dc | |||
36ee4e6c3b | |||
2036e4c85c | |||
f24034de84 | |||
522ff86081 | |||
669e3c8ed9 | |||
ce850f464c | |||
03eaa61cef | |||
e10e953d24 | |||
2b47bb3d82 | |||
73d819116c | |||
c8dd984663 | |||
6087eb6d0e | |||
97b43d1d36 | |||
57ebadbaf8 | |||
cad7bb1151 | |||
9a376d47c5 | |||
b79adc05f4 | |||
f765c5e319 | |||
edc445c0c9 | |||
ab6b0f3f7f | |||
5e7902e733 | |||
f9f821aa55 | |||
9ed4b2a5ae | |||
0130ced790 | |||
8dab07af82 | |||
f6cd3fa5ed | |||
faae1a028e | |||
f5e32184fe | |||
18c7138237 | |||
3f0fbae7e2 | |||
7f1a258ff9 | |||
35b38d5cb2 | |||
09e8a437d4 | |||
d2bedcc182 | |||
84eda6e459 | |||
f5e7530fc7 | |||
f983b34784 | |||
36bbe64898 | |||
627a393ed6 | |||
a025b151ef | |||
18b6f13395 | |||
051413550f | |||
3e10574736 | |||
9a3041004b | |||
87f71b8ce1 | |||
825146f1e3 | |||
52995416fd | |||
6c43d0247a | |||
9aa98d9f0c | |||
c3a29d6df1 | |||
82f84416a9 | |||
9dd3162dbe | |||
7ef519756a | |||
3bbe74d1c1 | |||
409f6718b8 | |||
9c0e179080 | |||
b3b278d41f | |||
0f466dbafb | |||
fbb4a9a3a6 | |||
8ddae5cd71 | |||
b0915c7b60 | |||
831bb4e334 | |||
4e025506fa | |||
abccf451bf | |||
14954117c0 | |||
629f408fe5 | |||
86c6ab3c01 | |||
4a6ff94701 | |||
e480b08d58 | |||
caf53861d1 | |||
d0480648ba | |||
eb8cfe799f | |||
b9f2541880 | |||
bde9b08bfe | |||
8a4c862633 | |||
785c90f4b8 | |||
dd6a11e4c7 | |||
64e9503adb | |||
36c885bf34 | |||
ad7cde805d | |||
2c2c67f4dc | |||
cc4f8dfab0 | |||
0fb13608c5 | |||
09dbe17da0 | |||
fdd347c9aa | |||
572095515b | |||
f2d4aa0822 | |||
030a22d795 | |||
c70afcdb44 | |||
526d6c03b8 | |||
261b55300d | |||
e13bfd9a17 | |||
e096d18bac | |||
9460f0e4f3 | |||
e6591f52ac | |||
07e3d1fd5c | |||
1fbc6b24c8 | |||
982777be94 | |||
6610a34ad0 | |||
bfa8a0441a | |||
7723622ec7 | |||
6bcc8c70ef | |||
d114d5f95a | |||
b5c734da42 | |||
2077bb94c1 | |||
65a4ee7fb4 | |||
debf293298 | |||
a0df3e7d1e | |||
0d67c2d164 | |||
682bd7b622 | |||
fa0e54edbb | |||
5a0b209663 | |||
7e8859fd0e | |||
444fa2e0ab | |||
a31455b921 | |||
ac0213a516 | |||
45a6e2c305 | |||
11cbd396c0 | |||
a343445cd2 | |||
be3d62487c | |||
58905bd01a | |||
08506eac2d | |||
02c6b0374d | |||
0722c06275 | |||
17a4044d97 | |||
27a7194634 | |||
d73f560bcc | |||
e92f43b83e | |||
fed79ce4e6 | |||
fc45cf03bf | |||
efde11a0f3 | |||
fb951ff9b5 | |||
f5865e895e | |||
b8c2d4c6c7 | |||
778ad49ab4 | |||
fe7dd1305f | |||
378a3df5ea | |||
e63b81d69c | |||
c2fa2cdd8a | |||
6f215427f8 | |||
67ed4e0570 | |||
8a15178557 | |||
f3ecfab378 | |||
804563d5b2 | |||
c3e5d983b9 | |||
d21edcfed5 | |||
9b69a45eee | |||
7424ee755a | |||
ff664fd1d8 | |||
fd3f03580d | |||
a09150846a | |||
f2a9c55637 | |||
eaa3f83e46 | |||
e786cc1454 | |||
cd0c632fcb | |||
d5f248cb82 | |||
6a800abe06 |
6
.gitignore
vendored
6
.gitignore
vendored
@ -17,10 +17,8 @@ config.status
|
|||||||
config
|
config
|
||||||
configure
|
configure
|
||||||
data/50-gnome-shell-*.xml
|
data/50-gnome-shell-*.xml
|
||||||
data/gnome-shell.desktop
|
data/org.gnome.Shell.desktop
|
||||||
data/gnome-shell.desktop.in
|
data/org.gnome.Shell.desktop.in
|
||||||
data/gnome-shell-wayland.desktop
|
|
||||||
data/gnome-shell-wayland.desktop.in
|
|
||||||
data/gnome-shell-extension-prefs.desktop
|
data/gnome-shell-extension-prefs.desktop
|
||||||
data/gnome-shell-extension-prefs.desktop.in
|
data/gnome-shell-extension-prefs.desktop.in
|
||||||
data/gnome-shell-theme.gresource
|
data/gnome-shell-theme.gresource
|
||||||
|
159
NEWS
159
NEWS
@ -1,3 +1,162 @@
|
|||||||
|
3.19.4
|
||||||
|
======
|
||||||
|
* gdm: Do not allow bypassing disabled Sign In button [Michael; #746180]
|
||||||
|
* Style week numbers in calendar [Jakub; #683245]
|
||||||
|
* Misc. bug fixes [Christophe, Jakub, Rui; #759708, #760577, #760945]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Michael Catanzaro, Marek Černocký, Christophe Fergeau, Rui Matos,
|
||||||
|
Jakub Steiner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Aurimas Černius [lt], Enrico Nicoletto [pt_BR], Andika Triwidada [id],
|
||||||
|
Mario Blättermann [de], Marek Černocký [cs], Kjartan Maraas [nb],
|
||||||
|
Muhammet Kara [tr], Stas Solovey [ru]
|
||||||
|
|
||||||
|
3.19.3
|
||||||
|
======
|
||||||
|
* Fix thumbnail scaling in window switcher on HiDPI [Florian; #758676]
|
||||||
|
* Update animated backgrounds on timezone changes [Florian; #758939]
|
||||||
|
* loginDialog: Update user list on user changes [Michael; #758568]
|
||||||
|
* Fix touch interaction on wayland [Carlos; #756748]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Michael Catanzaro, Carlos Garnacho, Kalev Lember, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Daniel Korostil [uk], Muhammet Kara [tr], Dušan Kazik [sk],
|
||||||
|
Baurzhan Muftakhidinov [kk], Marek Černocký [cs]
|
||||||
|
|
||||||
|
3.19.2
|
||||||
|
======
|
||||||
|
* Make gnome-shell DBus activatable [Ray; #741666]
|
||||||
|
* Fix browser plugin crash in Firefox [Carlos; #737932, #757940]
|
||||||
|
* Optionally show battery percentage in system status area [Bastien; #735771]
|
||||||
|
* Misc. bug fixes [Kalev, Florian, Bastien; #757418, #757668, #757779, #757816,
|
||||||
|
#745626, #758220]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Michael Biebl, Michael Catanzaro, Piotr Drąg, Carlos Garcia Campos,
|
||||||
|
Kalev Lember, Florian Müllner, Bastien Nocera, Ray Strode
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Pedro Albuquerque [pt], liushuyu [zh_CN], Yosef Or Boczko [he],
|
||||||
|
Jiri Grönroos [fi], Kjartan Maraas [nb], GNOME Translation Robot [gd],
|
||||||
|
Daniel Mustieles [es], Marek Černocký [cs], Kristjan SCHMIDT [eo],
|
||||||
|
Stas Solovey [ru]
|
||||||
|
|
||||||
|
3.19.1
|
||||||
|
======
|
||||||
|
* Respect text-scaling factor under wayland [Owen; #756447]
|
||||||
|
* Show the Bluetooth submenu when there were setup devices [Bastien; #723848]
|
||||||
|
* Misc. bug fixes [Florian, Cosimo, Rui, Ray, Owen, Jakub, Bastien;
|
||||||
|
#756697, #756714, #756605, #754814, #738942, #756983, #756925,
|
||||||
|
#757011, #673235, #757150]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Cosimo Cecchi, Rui Matos, Florian Müllner, Bastien Nocera, Jakub Steiner,
|
||||||
|
Ray Strode, Owen W. Taylor
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Kjartan Maraas [nb], Khaled Hosny [ar], Balázs Meskó [hu],
|
||||||
|
Daniel Șerbănescu [ro], Marek Černocký [cs]
|
||||||
|
|
||||||
|
3.18.1
|
||||||
|
======
|
||||||
|
* Fix screen freezes when a notification is pushed [Carlos; #755425]
|
||||||
|
* Fix overzealous ellipsization in system status menu [Adel, Florian; #708472]
|
||||||
|
* Hide app menu when disabled by setting [Florian; #745919]
|
||||||
|
* Fix lightbox effect when animations are disabled [Rui; #755827]
|
||||||
|
* Do not mark hotplug notifications as critical [Florian; #657923]
|
||||||
|
* Fix icons getting cut off in dash [Florian; #745649]
|
||||||
|
* Animate fullscreen/unfullscreen operations [Cosimo; #707248]
|
||||||
|
* Misc. bug fixes [Florian, Owen; #748919, #674799, #754581]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Emmanuele Bassi, Michael Catanzaro, Cosimo Cecchi, Matthias Clasen,
|
||||||
|
Adel Gadllah, Carlos Garnacho, Ekaterina Gerasimova, Rui Matos,
|
||||||
|
Florian Müllner, Owen W. Taylor
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Марко Костић [sr], Милош Поповић [sr@latin], Khaled Hosny [ar],
|
||||||
|
Trần Ngọc Quân [vi], Petr Kovar [cs], Alexandre Franke [fr],
|
||||||
|
Fran Dieguez [gl], Anders Jonsson [sv], Piotr Drąg [pl], Dušan Kazik [sk],
|
||||||
|
Milo Casagrande [it], Changwoo Ryu [ko], Stas Solovey [ru],
|
||||||
|
Rafael Fontenelle [pt_BR], Tom Tryfonidis [el], Aurimas Černius [lt],
|
||||||
|
Seán de Búrca [ga], Christian Kirbach [de], Jiri Grönroos [fi],
|
||||||
|
Pedro Albuquerque [pt], Baurzhan Muftakhidinov [kk], Daniel Mustieles [es],
|
||||||
|
Marek Černocký [cs], Ask Hjorth Larsen [da], Inaki Larranaga Murgoitio [eu]
|
||||||
|
|
||||||
|
3.18.0
|
||||||
|
======
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Sendy Aditya Suryana [id], Kris Thomsen [da], Seán de Búrca [ga],
|
||||||
|
Andika Triwidada [id], Enrico Nicoletto [pt_BR], Anders Jonsson [sv],
|
||||||
|
Rūdolfs Mazurs [lv]
|
||||||
|
|
||||||
|
3.17.92
|
||||||
|
=======
|
||||||
|
* Fix race when loading multiple background animations [Josselin; #741453]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Michael Biebl, Josselin Mouette, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Baurzhan Muftakhidinov [kk], Changwoo Ryu [ko], Christian Kirbach [de],
|
||||||
|
Kjartan Maraas [nb], Jiri Grönroos [fi], Arash Mousavi [fa],
|
||||||
|
Jiro Matsuzawa [ja], Marek Černocký [cs], Milo Casagrande [it]
|
||||||
|
|
||||||
|
3.17.91
|
||||||
|
=======
|
||||||
|
* Fix login screen spinner causing wakeups while VT-switched away
|
||||||
|
[Ray, Rui; #753891]
|
||||||
|
* Fix scrolling of user list on login screen [Florian; #754525]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Piotr Drąg, Rui Matos, Florian Müllner, Ray Strode
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Dušan Kazik [sk], Jordi Mas [ca], Aurimas Černius [lt], Stas Solovey [ru],
|
||||||
|
Piotr Drąg [pl], Pedro Albuquerque [pt], Daniel Mustieles [es],
|
||||||
|
Chao-Hsiung Liao [zh_TW], Muhammet Kara [tr], Fran Dieguez [gl],
|
||||||
|
Hannie Dumoleyn [nl], Yosef Or Boczko [he], Tom Tryfonidis [el],
|
||||||
|
A S Alam [pa], Balázs Úr [hu], Alexandre Franke [fr], Frédéric Péters [fr]
|
||||||
|
|
||||||
|
3.17.90
|
||||||
|
=======
|
||||||
|
* Avoid caret/focus viewport changes during pointer movement [Rui; #752138]
|
||||||
|
* Match GTK+'s modal dialogs for system modal dialogs [Carlos; #746108]
|
||||||
|
* Refine message list style [Florian; #749958]
|
||||||
|
* Fix type-ahead behavior for backspace and compose key [Rui; #753319, #753320]
|
||||||
|
* Refine the system status menu [Florian; #751377]
|
||||||
|
* Misc. bug fixes and cleanups [Bastien, Ray, Florian, Jakub; #752779, #752739,
|
||||||
|
#741366, #651503, #753064, #753181, #752881]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Rui Matos, Florian Müllner, Bastien Nocera, Carlos Soriano, Jakub Steiner,
|
||||||
|
Ray Strode, Rico Tzschichholz
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Marek Černocký [cs], Kjartan Maraas [nb], Jordi Mas [ca], Muhammet Kara [tr],
|
||||||
|
Enrico Nicoletto [pt_BR]
|
||||||
|
|
||||||
|
3.17.4
|
||||||
|
======
|
||||||
|
* Fix fuzziness of app menu icon [Jakub; #747932]
|
||||||
|
* Implement 4 finger swipe gesture for touchpads [Carlos; #752250]
|
||||||
|
* Misc. bug fixes [Florian, Alexandre, Piotr, Ray, Mario; #751921, #659969,
|
||||||
|
#752438, #752675]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Piotr Drąg, Alexandre Franke, Carlos Garnacho, Florian Müllner,
|
||||||
|
Mario Sanchez Prada, Jakub Steiner, Jasper St. Pierre, Ray Strode
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Benjamin Steinwender [de], Pedro Albuquerque [pt], Fabio Tomat [fur],
|
||||||
|
Matej Urbančič [sl], Daniel Mustieles [es], Yosef Or Boczko [he],
|
||||||
|
Daniel Martinez [an]
|
||||||
|
|
||||||
3.17.3
|
3.17.3
|
||||||
======
|
======
|
||||||
* Handle touch events in OSK on wayland [Rui; #750287]
|
* Handle touch events in OSK on wayland [Rui; #750287]
|
||||||
|
@ -3,7 +3,10 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR)
|
|||||||
|
|
||||||
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
||||||
|
|
||||||
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined
|
# Browsers can unload and reload the module while browsing, which is not supported by GObject.
|
||||||
|
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
|
||||||
|
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
|
||||||
|
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
|
||||||
|
|
||||||
libgnome_shell_browser_plugin_la_LIBADD = \
|
libgnome_shell_browser_plugin_la_LIBADD = \
|
||||||
$(BROWSER_PLUGIN_LIBS)
|
$(BROWSER_PLUGIN_LIBS)
|
||||||
|
@ -33,20 +33,16 @@
|
|||||||
#include <json-glib/json-glib.h>
|
#include <json-glib/json-glib.h>
|
||||||
|
|
||||||
#define ORIGIN "extensions.gnome.org"
|
#define ORIGIN "extensions.gnome.org"
|
||||||
#define PLUGIN_NAME "Gnome Shell Integration"
|
#define PLUGIN_NAME "GNOME Shell Integration"
|
||||||
#define PLUGIN_DESCRIPTION "This plugin provides integration with Gnome Shell " \
|
#define PLUGIN_DESCRIPTION "This plugin provides integration with GNOME Shell " \
|
||||||
"for live extension enabling and disabling. " \
|
"for live extension enabling and disabling. " \
|
||||||
"It can be used only by extensions.gnome.org"
|
"It can be used only by extensions.gnome.org"
|
||||||
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type";
|
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::GNOME Shell Integration Dummy Content-Type";
|
||||||
|
|
||||||
#define PLUGIN_API_VERSION 5
|
#define PLUGIN_API_VERSION 5
|
||||||
|
|
||||||
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
|
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
GDBusProxy *proxy;
|
|
||||||
} PluginData;
|
|
||||||
|
|
||||||
static NPNetscapeFuncs funcs;
|
static NPNetscapeFuncs funcs;
|
||||||
|
|
||||||
static inline gchar *
|
static inline gchar *
|
||||||
@ -145,121 +141,6 @@ check_origin_and_protocol (NPP instance)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =============== public entry points =================== */
|
|
||||||
|
|
||||||
NPError
|
|
||||||
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
|
||||||
{
|
|
||||||
/* global initialization routine, called once when plugin
|
|
||||||
is loaded */
|
|
||||||
|
|
||||||
g_debug ("plugin loaded");
|
|
||||||
|
|
||||||
memcpy (&funcs, pfuncs, sizeof (funcs));
|
|
||||||
|
|
||||||
plugin->size = sizeof(NPPluginFuncs);
|
|
||||||
plugin->newp = NPP_New;
|
|
||||||
plugin->destroy = NPP_Destroy;
|
|
||||||
plugin->getvalue = NPP_GetValue;
|
|
||||||
plugin->setwindow = NPP_SetWindow;
|
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError
|
|
||||||
NP_Shutdown(void)
|
|
||||||
{
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char*
|
|
||||||
NP_GetMIMEDescription(void)
|
|
||||||
{
|
|
||||||
return PLUGIN_MIME_STRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError
|
|
||||||
NP_GetValue(void *instance,
|
|
||||||
NPPVariable variable,
|
|
||||||
void *value)
|
|
||||||
{
|
|
||||||
switch (variable) {
|
|
||||||
case NPPVpluginNameString:
|
|
||||||
*(char**)value = PLUGIN_NAME;
|
|
||||||
break;
|
|
||||||
case NPPVpluginDescriptionString:
|
|
||||||
*(char**)value = PLUGIN_DESCRIPTION;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError
|
|
||||||
NPP_New(NPMIMEType mimetype,
|
|
||||||
NPP instance,
|
|
||||||
uint16_t mode,
|
|
||||||
int16_t argc,
|
|
||||||
char **argn,
|
|
||||||
char **argv,
|
|
||||||
NPSavedData *saved)
|
|
||||||
{
|
|
||||||
/* instance initialization function */
|
|
||||||
PluginData *data;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
g_debug ("plugin created");
|
|
||||||
|
|
||||||
if (!check_origin_and_protocol (instance))
|
|
||||||
return NPERR_GENERIC_ERROR;
|
|
||||||
|
|
||||||
data = g_slice_new (PluginData);
|
|
||||||
instance->pdata = data;
|
|
||||||
|
|
||||||
data->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
|
|
||||||
G_DBUS_PROXY_FLAGS_NONE,
|
|
||||||
NULL, /* interface info */
|
|
||||||
"org.gnome.Shell",
|
|
||||||
"/org/gnome/Shell",
|
|
||||||
"org.gnome.Shell.Extensions",
|
|
||||||
NULL, /* GCancellable */
|
|
||||||
&error);
|
|
||||||
if (!data->proxy)
|
|
||||||
{
|
|
||||||
/* ignore error if the shell is not running, otherwise warn */
|
|
||||||
if (error->domain != G_DBUS_ERROR ||
|
|
||||||
error->code != G_DBUS_ERROR_NAME_HAS_NO_OWNER)
|
|
||||||
{
|
|
||||||
g_warning ("Failed to set up Shell proxy: %s", error->message);
|
|
||||||
}
|
|
||||||
g_clear_error (&error);
|
|
||||||
return NPERR_GENERIC_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_debug ("plugin created successfully");
|
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError
|
|
||||||
NPP_Destroy(NPP instance,
|
|
||||||
NPSavedData **saved)
|
|
||||||
{
|
|
||||||
/* instance finalization function */
|
|
||||||
|
|
||||||
PluginData *data = instance->pdata;
|
|
||||||
|
|
||||||
g_debug ("plugin destroyed");
|
|
||||||
|
|
||||||
g_object_unref (data->proxy);
|
|
||||||
|
|
||||||
g_slice_free (PluginData, data);
|
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* =================== scripting interface =================== */
|
/* =================== scripting interface =================== */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -330,45 +211,18 @@ static NPObject *
|
|||||||
plugin_object_allocate (NPP instance,
|
plugin_object_allocate (NPP instance,
|
||||||
NPClass *klass)
|
NPClass *klass)
|
||||||
{
|
{
|
||||||
PluginData *data = instance->pdata;
|
PluginObject *obj = (PluginObject *) funcs.memalloc (sizeof (PluginObject));
|
||||||
PluginObject *obj = g_slice_new0 (PluginObject);
|
|
||||||
|
|
||||||
|
memset (obj, 0, sizeof (PluginObject));
|
||||||
obj->instance = instance;
|
obj->instance = instance;
|
||||||
obj->proxy = g_object_ref (data->proxy);
|
|
||||||
obj->settings = g_settings_new (SHELL_SCHEMA);
|
|
||||||
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
|
||||||
G_CALLBACK (on_shell_signal), obj);
|
|
||||||
|
|
||||||
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
return (NPObject*) obj;
|
||||||
"org.gnome.Shell",
|
|
||||||
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
|
||||||
on_shell_appeared,
|
|
||||||
NULL,
|
|
||||||
obj,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
g_debug ("plugin object created");
|
|
||||||
|
|
||||||
return (NPObject*)obj;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
plugin_object_deallocate (NPObject *npobj)
|
plugin_object_deallocate (NPObject *npobj)
|
||||||
{
|
{
|
||||||
PluginObject *obj = (PluginObject*)npobj;
|
funcs.memfree (npobj);
|
||||||
|
|
||||||
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
|
|
||||||
g_object_unref (obj->proxy);
|
|
||||||
|
|
||||||
if (obj->listener)
|
|
||||||
funcs.releaseobject (obj->listener);
|
|
||||||
|
|
||||||
if (obj->watch_name_id)
|
|
||||||
g_bus_unwatch_name (obj->watch_name_id);
|
|
||||||
|
|
||||||
g_debug ("plugin object destroyed");
|
|
||||||
|
|
||||||
g_slice_free (PluginObject, obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline gboolean
|
static inline gboolean
|
||||||
@ -1019,6 +873,149 @@ init_methods_and_properties (void)
|
|||||||
onextension_changed_id = funcs.getstringidentifier ("onchange");
|
onextension_changed_id = funcs.getstringidentifier ("onchange");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* =============== public entry points =================== */
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
||||||
|
{
|
||||||
|
/* global initialization routine, called once when plugin
|
||||||
|
is loaded */
|
||||||
|
|
||||||
|
g_debug ("plugin loaded");
|
||||||
|
|
||||||
|
memcpy (&funcs, pfuncs, sizeof (funcs));
|
||||||
|
|
||||||
|
plugin->size = sizeof(NPPluginFuncs);
|
||||||
|
plugin->newp = NPP_New;
|
||||||
|
plugin->destroy = NPP_Destroy;
|
||||||
|
plugin->getvalue = NPP_GetValue;
|
||||||
|
plugin->setwindow = NPP_SetWindow;
|
||||||
|
plugin->event = NPP_HandleEvent;
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_Shutdown(void)
|
||||||
|
{
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
NP_GetMIMEDescription(void)
|
||||||
|
{
|
||||||
|
return PLUGIN_MIME_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_GetValue(void *instance,
|
||||||
|
NPPVariable variable,
|
||||||
|
void *value)
|
||||||
|
{
|
||||||
|
switch (variable) {
|
||||||
|
case NPPVpluginNameString:
|
||||||
|
*(char**)value = PLUGIN_NAME;
|
||||||
|
break;
|
||||||
|
case NPPVpluginDescriptionString:
|
||||||
|
*(char**)value = PLUGIN_DESCRIPTION;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NPP_New(NPMIMEType mimetype,
|
||||||
|
NPP instance,
|
||||||
|
uint16_t mode,
|
||||||
|
int16_t argc,
|
||||||
|
char **argn,
|
||||||
|
char **argv,
|
||||||
|
NPSavedData *saved)
|
||||||
|
{
|
||||||
|
/* instance initialization function */
|
||||||
|
PluginObject *obj;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_debug ("plugin created");
|
||||||
|
|
||||||
|
if (!check_origin_and_protocol (instance))
|
||||||
|
return NPERR_GENERIC_ERROR;
|
||||||
|
|
||||||
|
/* set windowless mode */
|
||||||
|
funcs.setvalue(instance, NPPVpluginWindowBool, NULL);
|
||||||
|
|
||||||
|
g_debug ("creating scriptable object");
|
||||||
|
init_methods_and_properties ();
|
||||||
|
obj = (PluginObject *) funcs.createobject (instance, &plugin_class);
|
||||||
|
instance->pdata = obj;
|
||||||
|
|
||||||
|
obj->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
|
||||||
|
G_DBUS_PROXY_FLAGS_NONE,
|
||||||
|
NULL, /* interface info */
|
||||||
|
"org.gnome.Shell",
|
||||||
|
"/org/gnome/Shell",
|
||||||
|
"org.gnome.Shell.Extensions",
|
||||||
|
NULL, /* GCancellable */
|
||||||
|
&error);
|
||||||
|
if (!obj->proxy)
|
||||||
|
{
|
||||||
|
/* ignore error if the shell is not running, otherwise warn */
|
||||||
|
if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER))
|
||||||
|
{
|
||||||
|
g_warning ("Failed to set up Shell proxy: %s", error->message);
|
||||||
|
}
|
||||||
|
g_clear_error (&error);
|
||||||
|
return NPERR_GENERIC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj->settings = g_settings_new (SHELL_SCHEMA);
|
||||||
|
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
||||||
|
G_CALLBACK (on_shell_signal), obj);
|
||||||
|
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
||||||
|
"org.gnome.Shell",
|
||||||
|
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
||||||
|
on_shell_appeared,
|
||||||
|
NULL,
|
||||||
|
obj,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_debug ("plugin created successfully");
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NPP_Destroy(NPP instance,
|
||||||
|
NPSavedData **saved)
|
||||||
|
{
|
||||||
|
/* instance finalization function */
|
||||||
|
PluginObject *obj = (PluginObject *) instance->pdata;
|
||||||
|
|
||||||
|
if (!obj)
|
||||||
|
return NPERR_INVALID_INSTANCE_ERROR;
|
||||||
|
|
||||||
|
g_debug ("plugin destroyed");
|
||||||
|
|
||||||
|
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
|
||||||
|
g_object_unref (obj->proxy);
|
||||||
|
|
||||||
|
if (obj->listener)
|
||||||
|
funcs.releaseobject (obj->listener);
|
||||||
|
|
||||||
|
if (obj->restart_listener)
|
||||||
|
funcs.releaseobject (obj->restart_listener);
|
||||||
|
|
||||||
|
if (obj->watch_name_id)
|
||||||
|
g_bus_unwatch_name (obj->watch_name_id);
|
||||||
|
|
||||||
|
funcs.releaseobject((NPObject *)obj);
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
NPError
|
NPError
|
||||||
NPP_GetValue(NPP instance,
|
NPP_GetValue(NPP instance,
|
||||||
NPPVariable variable,
|
NPPVariable variable,
|
||||||
@ -1029,13 +1026,10 @@ NPP_GetValue(NPP instance,
|
|||||||
switch (variable) {
|
switch (variable) {
|
||||||
case NPPVpluginScriptableNPObject:
|
case NPPVpluginScriptableNPObject:
|
||||||
g_debug ("creating scriptable object");
|
g_debug ("creating scriptable object");
|
||||||
init_methods_and_properties ();
|
if (!instance->pdata)
|
||||||
|
return NPERR_INVALID_INSTANCE_ERROR;
|
||||||
|
|
||||||
*(NPObject**)value = funcs.createobject (instance, &plugin_class);
|
*(NPObject**)value = instance->pdata;
|
||||||
break;
|
|
||||||
|
|
||||||
case NPPVpluginNeedsXEmbed:
|
|
||||||
*(bool *)value = TRUE;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -1053,3 +1047,11 @@ NPP_SetWindow(NPP instance,
|
|||||||
{
|
{
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t
|
||||||
|
NPP_HandleEvent(NPP instance,
|
||||||
|
void *event)
|
||||||
|
{
|
||||||
|
/* Ignore the event */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
17
configure.ac
17
configure.ac
@ -1,5 +1,6 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[3.17.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[3.19.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
AX_IS_RELEASE([git-directory])
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
@ -74,13 +75,13 @@ AS_IF([test x$enable_systemd != xno], [
|
|||||||
AC_MSG_RESULT($enable_systemd)
|
AC_MSG_RESULT($enable_systemd)
|
||||||
|
|
||||||
CLUTTER_MIN_VERSION=1.21.5
|
CLUTTER_MIN_VERSION=1.21.5
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4
|
||||||
GJS_MIN_VERSION=1.39.0
|
GJS_MIN_VERSION=1.39.0
|
||||||
MUTTER_MIN_VERSION=3.17.3
|
MUTTER_MIN_VERSION=3.19.4
|
||||||
GTK_MIN_VERSION=3.15.0
|
GTK_MIN_VERSION=3.15.0
|
||||||
GIO_MIN_VERSION=2.45.3
|
GIO_MIN_VERSION=2.45.3
|
||||||
LIBECAL_MIN_VERSION=3.5.3
|
LIBECAL_MIN_VERSION=3.5.3
|
||||||
LIBEDATASERVER_MIN_VERSION=3.13.90
|
LIBEDATASERVER_MIN_VERSION=3.17.2
|
||||||
TELEPATHY_GLIB_MIN_VERSION=0.17.5
|
TELEPATHY_GLIB_MIN_VERSION=0.17.5
|
||||||
POLKIT_MIN_VERSION=0.100
|
POLKIT_MIN_VERSION=0.100
|
||||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
@ -116,9 +117,9 @@ PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
|||||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
||||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||||
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
||||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
PKG_CHECK_MODULES(TRAY, clutter-1.0 gtk+-3.0)
|
||||||
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
|
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
|
||||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.13.1)
|
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.19.2)
|
||||||
|
|
||||||
AC_ARG_ENABLE(browser-plugin,
|
AC_ARG_ENABLE(browser-plugin,
|
||||||
[AS_HELP_STRING([--enable-browser-plugin],
|
[AS_HELP_STRING([--enable-browser-plugin],
|
||||||
@ -220,7 +221,7 @@ if test "$enable_man" != no; then
|
|||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
||||||
|
|
||||||
GNOME_COMPILE_WARNINGS([error])
|
AX_COMPILER_FLAGS()
|
||||||
case "$WARN_CFLAGS" in
|
case "$WARN_CFLAGS" in
|
||||||
*-Werror*)
|
*-Werror*)
|
||||||
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
|
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
|
||||||
@ -269,7 +270,7 @@ Build configuration:
|
|||||||
Prefix: ${prefix}
|
Prefix: ${prefix}
|
||||||
Source code location: ${srcdir}
|
Source code location: ${srcdir}
|
||||||
Compiler: ${CC}
|
Compiler: ${CC}
|
||||||
Compiler Warnings: $enable_compile_warnings
|
Compiler Warnings: $ax_enable_compile_warnings
|
||||||
|
|
||||||
Support for NetworkManager: $have_networkmanager
|
Support for NetworkManager: $have_networkmanager
|
||||||
Support for GStreamer recording: $build_recorder
|
Support for GStreamer recording: $build_recorder
|
||||||
|
@ -2,7 +2,7 @@ CLEANFILES =
|
|||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
desktopdir=$(datadir)/applications
|
desktopdir=$(datadir)/applications
|
||||||
desktop_DATA = gnome-shell.desktop gnome-shell-wayland.desktop gnome-shell-extension-prefs.desktop
|
desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop
|
||||||
|
|
||||||
if HAVE_NETWORKMANAGER
|
if HAVE_NETWORKMANAGER
|
||||||
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
|
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
|
||||||
@ -104,8 +104,7 @@ convertdir = $(datadir)/GConf/gsettings
|
|||||||
convert_DATA = gnome-shell-overrides.convert
|
convert_DATA = gnome-shell-overrides.convert
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
gnome-shell.desktop.in.in \
|
org.gnome.Shell.desktop.in.in \
|
||||||
gnome-shell-wayland.desktop.in.in \
|
|
||||||
gnome-shell-extension-prefs.desktop.in.in \
|
gnome-shell-extension-prefs.desktop.in.in \
|
||||||
$(introspection_DATA) \
|
$(introspection_DATA) \
|
||||||
$(menu_DATA) \
|
$(menu_DATA) \
|
||||||
@ -121,8 +120,7 @@ EXTRA_DIST = \
|
|||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
CLEANFILES += \
|
CLEANFILES += \
|
||||||
gnome-shell.desktop.in \
|
org.gnome.Shell.desktop.in \
|
||||||
gnome-shell-wayland.desktop.in \
|
|
||||||
gnome-shell-extension-prefs.in \
|
gnome-shell-extension-prefs.in \
|
||||||
$(desktop_DATA) \
|
$(desktop_DATA) \
|
||||||
$(keys_DATA) \
|
$(keys_DATA) \
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
_Name=GNOME Shell (wayland compositor)
|
|
||||||
_Comment=Window management and application launching
|
|
||||||
Exec=@bindir@/gnome-shell --wayland --display-server
|
|
||||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
|
||||||
X-GNOME-Bugzilla-Product=gnome-shell
|
|
||||||
X-GNOME-Bugzilla-Component=general
|
|
||||||
X-GNOME-Bugzilla-Version=@VERSION@
|
|
||||||
Categories=GNOME;GTK;Core;
|
|
||||||
OnlyShowIn=GNOME;
|
|
||||||
NoDisplay=true
|
|
||||||
X-GNOME-Autostart-Phase=DisplayServer
|
|
||||||
X-GNOME-Autostart-Notify=true
|
|
||||||
X-GNOME-AutoRestart=false
|
|
@ -10,7 +10,7 @@ X-GNOME-Bugzilla-Version=@VERSION@
|
|||||||
Categories=GNOME;GTK;Core;
|
Categories=GNOME;GTK;Core;
|
||||||
OnlyShowIn=GNOME;
|
OnlyShowIn=GNOME;
|
||||||
NoDisplay=true
|
NoDisplay=true
|
||||||
X-GNOME-Autostart-Phase=WindowManager
|
X-GNOME-Autostart-Phase=DisplayServer
|
||||||
X-GNOME-Provides=panel;windowmanager;
|
X-GNOME-Provides=panel;windowmanager;
|
||||||
X-GNOME-Autostart-Notify=true
|
X-GNOME-Autostart-Notify=true
|
||||||
X-GNOME-AutoRestart=false
|
X-GNOME-AutoRestart=false
|
@ -51,6 +51,7 @@
|
|||||||
</key>
|
</key>
|
||||||
<key name="looking-glass-history" type="as">
|
<key name="looking-glass-history" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
|
<!-- Translators: looking glass is a debugger and inspector tool, see https://live.gnome.org/GnomeShell/LookingGlass -->
|
||||||
<_summary>History for the looking glass dialog</_summary>
|
<_summary>History for the looking glass dialog</_summary>
|
||||||
</key>
|
</key>
|
||||||
<key name="always-show-log-out" type="b">
|
<key name="always-show-log-out" type="b">
|
||||||
@ -71,6 +72,16 @@
|
|||||||
This key sets the default state of the checkbox.
|
This key sets the default state of the checkbox.
|
||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="had-bluetooth-devices-setup" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary>
|
||||||
|
<_description>
|
||||||
|
The shell will only show a Bluetooth menu item if a Bluetooth
|
||||||
|
adapter is powered, or if there were devices set up associated
|
||||||
|
with the default adapter. This will be reset if the default
|
||||||
|
adapter is ever seen not to have devices associated to it.
|
||||||
|
</_description>
|
||||||
|
</key>
|
||||||
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||||
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
||||||
<child name="keyboard" schema="org.gnome.shell.keyboard"/>
|
<child name="keyboard" schema="org.gnome.shell.keyboard"/>
|
||||||
|
@ -37,14 +37,13 @@ stage {
|
|||||||
icon-shadow: 0 1px black; }
|
icon-shadow: 0 1px black; }
|
||||||
.button:focus {
|
.button:focus {
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
border-color: #215d9c;
|
|
||||||
box-shadow: inset 0 1px #454f52;
|
|
||||||
text-shadow: 0 1px black;
|
text-shadow: 0 1px black;
|
||||||
icon-shadow: 0 1px black; }
|
icon-shadow: 0 1px black;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px #215d9c; }
|
||||||
.button:insensitive {
|
.button:insensitive {
|
||||||
color: #7f7f7f;
|
color: gray;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: rgba(62, 67, 68, 0.7);
|
background-color: rgba(62, 67, 69, 0.7);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
@ -52,9 +51,46 @@ stage {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #222728;
|
background-color: #222728;
|
||||||
|
box-shadow: inset 0 0 black;
|
||||||
|
text-shadow: none;
|
||||||
|
icon-shadow: none; }
|
||||||
|
|
||||||
|
.modal-dialog-linked-button {
|
||||||
|
border-right-width: 1px;
|
||||||
|
color: #eeeeec;
|
||||||
|
background-color: #2e3436;
|
||||||
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
|
box-shadow: inset 0 1px #454f52;
|
||||||
|
text-shadow: 0 1px black;
|
||||||
|
icon-shadow: 0 1px black;
|
||||||
|
padding: 12px; }
|
||||||
|
.modal-dialog-linked-button:insensitive {
|
||||||
|
color: gray;
|
||||||
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
|
background-color: rgba(62, 67, 69, 0.7);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
|
.modal-dialog-linked-button:active {
|
||||||
|
color: white;
|
||||||
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
|
background-color: #222728;
|
||||||
|
box-shadow: inset 0 0 black;
|
||||||
|
text-shadow: none;
|
||||||
|
icon-shadow: none; }
|
||||||
|
.modal-dialog-linked-button:focus {
|
||||||
|
color: #eeeeec;
|
||||||
|
text-shadow: 0 1px black;
|
||||||
|
icon-shadow: 0 1px black;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px #215d9c; }
|
||||||
|
.modal-dialog-linked-button:first-child {
|
||||||
|
border-radius: 0px 0px 0px 6px; }
|
||||||
|
.modal-dialog-linked-button:last-child {
|
||||||
|
border-right-width: 0px;
|
||||||
|
border-radius: 0px 0px 6px 0px; }
|
||||||
|
.modal-dialog-linked-button:first-child:last-child {
|
||||||
|
border-right-width: 0px;
|
||||||
|
border-radius: 0px 0px 6px 6px; }
|
||||||
|
|
||||||
/* Entries */
|
/* Entries */
|
||||||
StEntry {
|
StEntry {
|
||||||
@ -71,8 +107,8 @@ StEntry {
|
|||||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
|
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
|
||||||
border-color: rgba(166, 166, 166, 0.5); }
|
border-color: rgba(166, 166, 166, 0.5); }
|
||||||
StEntry:insensitive {
|
StEntry:insensitive {
|
||||||
color: #7f7f7f;
|
color: gray;
|
||||||
border-color: #0d0d0d;
|
border-color: #0e0e0e;
|
||||||
box-shadow: none; }
|
box-shadow: none; }
|
||||||
StEntry StIcon.capslock-warning {
|
StEntry StIcon.capslock-warning {
|
||||||
icon-size: 16px;
|
icon-size: 16px;
|
||||||
@ -95,10 +131,10 @@ StScrollBar {
|
|||||||
background-color: transparent; }
|
background-color: transparent; }
|
||||||
StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
|
StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
background-color: #000;
|
background-color: #999999;
|
||||||
margin: 3px; }
|
margin: 3px; }
|
||||||
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
|
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
|
||||||
background-color: #1a1a1a; }
|
background-color: #cccccc; }
|
||||||
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
|
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
|
||||||
background-color: #215d9c; }
|
background-color: #215d9c; }
|
||||||
|
|
||||||
@ -106,7 +142,7 @@ StScrollBar {
|
|||||||
.slider {
|
.slider {
|
||||||
height: 1em;
|
height: 1em;
|
||||||
-slider-height: 0.3em;
|
-slider-height: 0.3em;
|
||||||
-slider-background-color: #0d0d0d;
|
-slider-background-color: #0e0e0e;
|
||||||
-slider-border-color: black;
|
-slider-border-color: black;
|
||||||
-slider-active-background-color: #215d9c;
|
-slider-active-background-color: #215d9c;
|
||||||
-slider-active-border-color: #184472;
|
-slider-active-border-color: #184472;
|
||||||
@ -160,11 +196,12 @@ StScrollBar {
|
|||||||
background-color: white; }
|
background-color: white; }
|
||||||
|
|
||||||
.modal-dialog {
|
.modal-dialog {
|
||||||
border-radius: 5px;
|
border-radius: 9px;
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
background-color: rgba(23, 25, 26, 0.95);
|
background-color: rgba(23, 25, 26, 0.95);
|
||||||
border: 3px solid rgba(238, 238, 236, 0.5);
|
border: 1px solid rgba(238, 238, 236, 0.2); }
|
||||||
padding: 24px; }
|
.modal-dialog .modal-dialog-content-box {
|
||||||
|
padding: 24px; }
|
||||||
.modal-dialog .run-dialog-entry {
|
.modal-dialog .run-dialog-entry {
|
||||||
width: 20em;
|
width: 20em;
|
||||||
margin-bottom: 6px; }
|
margin-bottom: 6px; }
|
||||||
@ -179,10 +216,6 @@ StScrollBar {
|
|||||||
color: #d6d6d1;
|
color: #d6d6d1;
|
||||||
padding-bottom: .4em; }
|
padding-bottom: .4em; }
|
||||||
|
|
||||||
.button-dialog-button-box {
|
|
||||||
spacing: 18px;
|
|
||||||
padding-top: 48px; }
|
|
||||||
|
|
||||||
.show-processes-dialog-subject,
|
.show-processes-dialog-subject,
|
||||||
.mount-question-dialog-subject,
|
.mount-question-dialog-subject,
|
||||||
.end-session-dialog-subject {
|
.end-session-dialog-subject {
|
||||||
@ -191,7 +224,7 @@ StScrollBar {
|
|||||||
/* End Session Dialog */
|
/* End Session Dialog */
|
||||||
.end-session-dialog {
|
.end-session-dialog {
|
||||||
spacing: 42px;
|
spacing: 42px;
|
||||||
border: 3px solid rgba(238, 238, 236, 0.2); }
|
border: 1px solid rgba(238, 238, 236, 0.2); }
|
||||||
|
|
||||||
.end-session-dialog-list {
|
.end-session-dialog-list {
|
||||||
padding-top: 20px; }
|
padding-top: 20px; }
|
||||||
@ -375,9 +408,9 @@ StScrollBar {
|
|||||||
spacing-rows: 15px;
|
spacing-rows: 15px;
|
||||||
spacing-columns: 1em; }
|
spacing-columns: 1em; }
|
||||||
|
|
||||||
/* Popvers/Menus */
|
/* Popovers/Menus */
|
||||||
.popup-menu {
|
.popup-menu {
|
||||||
min-width: 200px; }
|
min-width: 15em; }
|
||||||
.popup-menu .popup-sub-menu {
|
.popup-menu .popup-sub-menu {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
box-shadow: inset 0 -1px 0px #0d0d0d; }
|
box-shadow: inset 0 -1px 0px #0d0d0d; }
|
||||||
@ -411,7 +444,7 @@ StScrollBar {
|
|||||||
|
|
||||||
.popup-menu-ornament {
|
.popup-menu-ornament {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
width: 1em; }
|
width: 1.2em; }
|
||||||
|
|
||||||
.popup-menu-boxpointer,
|
.popup-menu-boxpointer,
|
||||||
.candidate-popup-boxpointer {
|
.candidate-popup-boxpointer {
|
||||||
@ -592,6 +625,8 @@ StScrollBar {
|
|||||||
#panel .panel-status-indicators-box,
|
#panel .panel-status-indicators-box,
|
||||||
#panel .panel-status-menu-box {
|
#panel .panel-status-menu-box {
|
||||||
spacing: 2px; }
|
spacing: 2px; }
|
||||||
|
#panel .power-status.panel-status-indicators-box {
|
||||||
|
spacing: 0; }
|
||||||
#panel .screencast-indicator {
|
#panel .screencast-indicator {
|
||||||
color: #f57900; }
|
color: #f57900; }
|
||||||
|
|
||||||
@ -702,7 +737,7 @@ StScrollBar {
|
|||||||
border-left-width: 1px; }
|
border-left-width: 1px; }
|
||||||
|
|
||||||
.calendar-nonwork-day {
|
.calendar-nonwork-day {
|
||||||
color: #7f7f7f; }
|
color: gray; }
|
||||||
|
|
||||||
.calendar-today {
|
.calendar-today {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -717,9 +752,20 @@ StScrollBar {
|
|||||||
color: rgba(255, 255, 255, 0.15);
|
color: rgba(255, 255, 255, 0.15);
|
||||||
opacity: 0.5; }
|
opacity: 0.5; }
|
||||||
|
|
||||||
|
.calendar-week-number {
|
||||||
|
font-size: 70%;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 2.8em;
|
||||||
|
height: 2em;
|
||||||
|
border-radius: 2px 1em 2px 2px;
|
||||||
|
padding: 0.9em 0 0;
|
||||||
|
margin: 3px;
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
color: #000; }
|
||||||
|
|
||||||
/* Message list */
|
/* Message list */
|
||||||
.message-list {
|
.message-list {
|
||||||
width: 420px; }
|
width: 31.5em; }
|
||||||
|
|
||||||
.message-list-sections {
|
.message-list-sections {
|
||||||
spacing: 1.5em; }
|
spacing: 1.5em; }
|
||||||
@ -754,7 +800,12 @@ StScrollBar {
|
|||||||
padding: 8px 8px 8px 0px; }
|
padding: 8px 8px 8px 0px; }
|
||||||
|
|
||||||
.message-icon-bin > StIcon {
|
.message-icon-bin > StIcon {
|
||||||
icon-size: 48px; }
|
icon-size: 32px; }
|
||||||
|
|
||||||
|
.message-secondary-bin:ltr {
|
||||||
|
padding-left: 8px; }
|
||||||
|
.message-secondary-bin:rtl {
|
||||||
|
padding-right: 8px; }
|
||||||
|
|
||||||
.message-secondary-bin {
|
.message-secondary-bin {
|
||||||
color: #999999; }
|
color: #999999; }
|
||||||
@ -763,14 +814,20 @@ StScrollBar {
|
|||||||
icon-size: 16px; }
|
icon-size: 16px; }
|
||||||
|
|
||||||
.message-title {
|
.message-title {
|
||||||
font-weight: bold; }
|
font-weight: bold;
|
||||||
|
font-size: 1.1em; }
|
||||||
|
|
||||||
.message-content {
|
.message-content {
|
||||||
padding: 8px; }
|
padding: 8px;
|
||||||
|
font-size: .9em; }
|
||||||
|
|
||||||
.system-switch-user-submenu-icon {
|
.system-switch-user-submenu-icon.user-icon {
|
||||||
icon-size: 24px;
|
icon-size: 20px;
|
||||||
border: 1px solid rgba(255, 255, 255, 0.4); }
|
padding: 0 2px; }
|
||||||
|
|
||||||
|
.system-switch-user-submenu-icon.default-icon {
|
||||||
|
icon-size: 16px;
|
||||||
|
padding: 0 4px; }
|
||||||
|
|
||||||
#appMenu {
|
#appMenu {
|
||||||
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
|
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
|
||||||
@ -779,7 +836,7 @@ StScrollBar {
|
|||||||
color: transparent; }
|
color: transparent; }
|
||||||
|
|
||||||
.aggregate-menu {
|
.aggregate-menu {
|
||||||
width: 360px; }
|
min-width: 21em; }
|
||||||
.aggregate-menu .popup-menu-icon {
|
.aggregate-menu .popup-menu-icon {
|
||||||
padding: 0 4px; }
|
padding: 0 4px; }
|
||||||
|
|
||||||
@ -834,7 +891,8 @@ StScrollBar {
|
|||||||
min-width: 470px; }
|
min-width: 470px; }
|
||||||
|
|
||||||
.nm-dialog-content {
|
.nm-dialog-content {
|
||||||
spacing: 20px; }
|
spacing: 20px;
|
||||||
|
padding: 24px; }
|
||||||
|
|
||||||
.nm-dialog-header-hbox {
|
.nm-dialog-header-hbox {
|
||||||
spacing: 10px; }
|
spacing: 10px; }
|
||||||
@ -915,10 +973,14 @@ StScrollBar {
|
|||||||
.search-entry {
|
.search-entry {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
padding: 7px 9px;
|
padding: 7px 9px;
|
||||||
border-radius: 6px; }
|
border-radius: 6px;
|
||||||
|
border-color: #747467;
|
||||||
|
color: #eeeeec;
|
||||||
|
background-color: #2e3436; }
|
||||||
.search-entry:focus {
|
.search-entry:focus {
|
||||||
padding: 6px 8px;
|
padding: 6px 8px;
|
||||||
border-width: 2px; }
|
border-width: 2px;
|
||||||
|
border-color: #215d9c; }
|
||||||
.search-entry .search-entry-icon {
|
.search-entry .search-entry-icon {
|
||||||
icon-size: 1em;
|
icon-size: 1em;
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
@ -1016,7 +1078,7 @@ StScrollBar {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #222728;
|
background-color: #222728;
|
||||||
box-shadow: none;
|
box-shadow: inset 0 0 black;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
.app-view-control:first-child {
|
.app-view-control:first-child {
|
||||||
@ -1335,10 +1397,9 @@ StScrollBar {
|
|||||||
color: white; }
|
color: white; }
|
||||||
.keyboard-key:focus {
|
.keyboard-key:focus {
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
border-color: #215d9c;
|
|
||||||
box-shadow: inset 0 1px #454f52;
|
|
||||||
text-shadow: 0 1px black;
|
text-shadow: 0 1px black;
|
||||||
icon-shadow: 0 1px black; }
|
icon-shadow: 0 1px black;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px #215d9c; }
|
||||||
.keyboard-key:hover, .keyboard-key:checked {
|
.keyboard-key:hover, .keyboard-key:checked {
|
||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
@ -1350,7 +1411,7 @@ StScrollBar {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #222728;
|
background-color: #222728;
|
||||||
box-shadow: none;
|
box-shadow: inset 0 0 black;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
.keyboard-key:grayed {
|
.keyboard-key:grayed {
|
||||||
@ -1443,13 +1504,13 @@ StScrollBar {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #1c5187;
|
background-color: #1c5187;
|
||||||
box-shadow: none;
|
box-shadow: inset 0 0 black;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
.login-dialog .modal-dialog-button:default:insensitive {
|
.login-dialog .modal-dialog-button:default:insensitive {
|
||||||
color: #7f7f7f;
|
color: gray;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: rgba(62, 67, 68, 0.7);
|
background-color: rgba(62, 67, 69, 0.7);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
|
Submodule data/theme/gnome-shell-sass updated: 3573116e4f...1d35c2890a
@ -37,14 +37,13 @@ stage {
|
|||||||
icon-shadow: 0 1px black; }
|
icon-shadow: 0 1px black; }
|
||||||
.button:focus {
|
.button:focus {
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
border-color: #215d9c;
|
|
||||||
box-shadow: inset 0 1px #454f52;
|
|
||||||
text-shadow: 0 1px black;
|
text-shadow: 0 1px black;
|
||||||
icon-shadow: 0 1px black; }
|
icon-shadow: 0 1px black;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px #215d9c; }
|
||||||
.button:insensitive {
|
.button:insensitive {
|
||||||
color: #939695;
|
color: #949796;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: rgba(66, 71, 73, 0.7);
|
background-color: rgba(66, 72, 73, 0.7);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
@ -52,9 +51,46 @@ stage {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #222728;
|
background-color: #222728;
|
||||||
|
box-shadow: inset 0 0 black;
|
||||||
|
text-shadow: none;
|
||||||
|
icon-shadow: none; }
|
||||||
|
|
||||||
|
.modal-dialog-linked-button {
|
||||||
|
border-right-width: 1px;
|
||||||
|
color: #eeeeec;
|
||||||
|
background-color: #2e3436;
|
||||||
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
|
box-shadow: inset 0 1px #454f52;
|
||||||
|
text-shadow: 0 1px black;
|
||||||
|
icon-shadow: 0 1px black;
|
||||||
|
padding: 12px; }
|
||||||
|
.modal-dialog-linked-button:insensitive {
|
||||||
|
color: #949796;
|
||||||
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
|
background-color: rgba(66, 72, 73, 0.7);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
|
.modal-dialog-linked-button:active {
|
||||||
|
color: white;
|
||||||
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
|
background-color: #222728;
|
||||||
|
box-shadow: inset 0 0 black;
|
||||||
|
text-shadow: none;
|
||||||
|
icon-shadow: none; }
|
||||||
|
.modal-dialog-linked-button:focus {
|
||||||
|
color: #eeeeec;
|
||||||
|
text-shadow: 0 1px black;
|
||||||
|
icon-shadow: 0 1px black;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px #215d9c; }
|
||||||
|
.modal-dialog-linked-button:first-child {
|
||||||
|
border-radius: 0px 0px 0px 6px; }
|
||||||
|
.modal-dialog-linked-button:last-child {
|
||||||
|
border-right-width: 0px;
|
||||||
|
border-radius: 0px 0px 6px 0px; }
|
||||||
|
.modal-dialog-linked-button:first-child:last-child {
|
||||||
|
border-right-width: 0px;
|
||||||
|
border-radius: 0px 0px 6px 6px; }
|
||||||
|
|
||||||
/* Entries */
|
/* Entries */
|
||||||
StEntry {
|
StEntry {
|
||||||
@ -71,8 +107,8 @@ StEntry {
|
|||||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
|
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
|
||||||
border-color: rgba(154, 154, 142, 0.5); }
|
border-color: rgba(154, 154, 142, 0.5); }
|
||||||
StEntry:insensitive {
|
StEntry:insensitive {
|
||||||
color: #939695;
|
color: #949796;
|
||||||
border-color: #323636;
|
border-color: #333636;
|
||||||
box-shadow: none; }
|
box-shadow: none; }
|
||||||
StEntry StIcon.capslock-warning {
|
StEntry StIcon.capslock-warning {
|
||||||
icon-size: 16px;
|
icon-size: 16px;
|
||||||
@ -95,10 +131,10 @@ StScrollBar {
|
|||||||
background-color: transparent; }
|
background-color: transparent; }
|
||||||
StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
|
StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
background-color: #393f3f;
|
background-color: #a6a8a7;
|
||||||
margin: 3px; }
|
margin: 3px; }
|
||||||
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
|
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
|
||||||
background-color: #515a5a; }
|
background-color: #cacbc9; }
|
||||||
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
|
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
|
||||||
background-color: #215d9c; }
|
background-color: #215d9c; }
|
||||||
|
|
||||||
@ -106,7 +142,7 @@ StScrollBar {
|
|||||||
.slider {
|
.slider {
|
||||||
height: 1em;
|
height: 1em;
|
||||||
-slider-height: 0.3em;
|
-slider-height: 0.3em;
|
||||||
-slider-background-color: #323636;
|
-slider-background-color: #333636;
|
||||||
-slider-border-color: #1c1f1f;
|
-slider-border-color: #1c1f1f;
|
||||||
-slider-active-background-color: #215d9c;
|
-slider-active-background-color: #215d9c;
|
||||||
-slider-active-border-color: #184472;
|
-slider-active-border-color: #184472;
|
||||||
@ -160,11 +196,12 @@ StScrollBar {
|
|||||||
background-color: white; }
|
background-color: white; }
|
||||||
|
|
||||||
.modal-dialog {
|
.modal-dialog {
|
||||||
border-radius: 5px;
|
border-radius: 9px;
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
background-color: rgba(23, 25, 26, 0.95);
|
background-color: rgba(23, 25, 26, 0.95);
|
||||||
border: 3px solid rgba(238, 238, 236, 0.5);
|
border: 1px solid rgba(238, 238, 236, 0.2); }
|
||||||
padding: 24px; }
|
.modal-dialog .modal-dialog-content-box {
|
||||||
|
padding: 24px; }
|
||||||
.modal-dialog .run-dialog-entry {
|
.modal-dialog .run-dialog-entry {
|
||||||
width: 20em;
|
width: 20em;
|
||||||
margin-bottom: 6px; }
|
margin-bottom: 6px; }
|
||||||
@ -179,10 +216,6 @@ StScrollBar {
|
|||||||
color: #d6d6d1;
|
color: #d6d6d1;
|
||||||
padding-bottom: .4em; }
|
padding-bottom: .4em; }
|
||||||
|
|
||||||
.button-dialog-button-box {
|
|
||||||
spacing: 18px;
|
|
||||||
padding-top: 48px; }
|
|
||||||
|
|
||||||
.show-processes-dialog-subject,
|
.show-processes-dialog-subject,
|
||||||
.mount-question-dialog-subject,
|
.mount-question-dialog-subject,
|
||||||
.end-session-dialog-subject {
|
.end-session-dialog-subject {
|
||||||
@ -191,7 +224,7 @@ StScrollBar {
|
|||||||
/* End Session Dialog */
|
/* End Session Dialog */
|
||||||
.end-session-dialog {
|
.end-session-dialog {
|
||||||
spacing: 42px;
|
spacing: 42px;
|
||||||
border: 3px solid rgba(238, 238, 236, 0.2); }
|
border: 1px solid rgba(238, 238, 236, 0.2); }
|
||||||
|
|
||||||
.end-session-dialog-list {
|
.end-session-dialog-list {
|
||||||
padding-top: 20px; }
|
padding-top: 20px; }
|
||||||
@ -375,9 +408,9 @@ StScrollBar {
|
|||||||
spacing-rows: 15px;
|
spacing-rows: 15px;
|
||||||
spacing-columns: 1em; }
|
spacing-columns: 1em; }
|
||||||
|
|
||||||
/* Popvers/Menus */
|
/* Popovers/Menus */
|
||||||
.popup-menu {
|
.popup-menu {
|
||||||
min-width: 200px; }
|
min-width: 15em; }
|
||||||
.popup-menu .popup-sub-menu {
|
.popup-menu .popup-sub-menu {
|
||||||
background-color: #343a3a;
|
background-color: #343a3a;
|
||||||
box-shadow: inset 0 -1px 0px #282c2c; }
|
box-shadow: inset 0 -1px 0px #282c2c; }
|
||||||
@ -411,7 +444,7 @@ StScrollBar {
|
|||||||
|
|
||||||
.popup-menu-ornament {
|
.popup-menu-ornament {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
width: 1em; }
|
width: 1.2em; }
|
||||||
|
|
||||||
.popup-menu-boxpointer,
|
.popup-menu-boxpointer,
|
||||||
.candidate-popup-boxpointer {
|
.candidate-popup-boxpointer {
|
||||||
@ -592,6 +625,8 @@ StScrollBar {
|
|||||||
#panel .panel-status-indicators-box,
|
#panel .panel-status-indicators-box,
|
||||||
#panel .panel-status-menu-box {
|
#panel .panel-status-menu-box {
|
||||||
spacing: 2px; }
|
spacing: 2px; }
|
||||||
|
#panel .power-status.panel-status-indicators-box {
|
||||||
|
spacing: 0; }
|
||||||
#panel .screencast-indicator {
|
#panel .screencast-indicator {
|
||||||
color: #f57900; }
|
color: #f57900; }
|
||||||
|
|
||||||
@ -702,7 +737,7 @@ StScrollBar {
|
|||||||
border-left-width: 1px; }
|
border-left-width: 1px; }
|
||||||
|
|
||||||
.calendar-nonwork-day {
|
.calendar-nonwork-day {
|
||||||
color: #939695; }
|
color: #949796; }
|
||||||
|
|
||||||
.calendar-today {
|
.calendar-today {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -717,9 +752,20 @@ StScrollBar {
|
|||||||
color: rgba(238, 238, 236, 0.15);
|
color: rgba(238, 238, 236, 0.15);
|
||||||
opacity: 0.5; }
|
opacity: 0.5; }
|
||||||
|
|
||||||
|
.calendar-week-number {
|
||||||
|
font-size: 70%;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 2.8em;
|
||||||
|
height: 2em;
|
||||||
|
border-radius: 2px 1em 2px 2px;
|
||||||
|
padding: 0.9em 0 0;
|
||||||
|
margin: 3px;
|
||||||
|
background-color: rgba(238, 238, 236, 0.1);
|
||||||
|
color: #393f3f; }
|
||||||
|
|
||||||
/* Message list */
|
/* Message list */
|
||||||
.message-list {
|
.message-list {
|
||||||
width: 420px; }
|
width: 31.5em; }
|
||||||
|
|
||||||
.message-list-sections {
|
.message-list-sections {
|
||||||
spacing: 1.5em; }
|
spacing: 1.5em; }
|
||||||
@ -754,7 +800,12 @@ StScrollBar {
|
|||||||
padding: 8px 8px 8px 0px; }
|
padding: 8px 8px 8px 0px; }
|
||||||
|
|
||||||
.message-icon-bin > StIcon {
|
.message-icon-bin > StIcon {
|
||||||
icon-size: 48px; }
|
icon-size: 32px; }
|
||||||
|
|
||||||
|
.message-secondary-bin:ltr {
|
||||||
|
padding-left: 8px; }
|
||||||
|
.message-secondary-bin:rtl {
|
||||||
|
padding-right: 8px; }
|
||||||
|
|
||||||
.message-secondary-bin {
|
.message-secondary-bin {
|
||||||
color: #8e8e80; }
|
color: #8e8e80; }
|
||||||
@ -763,14 +814,20 @@ StScrollBar {
|
|||||||
icon-size: 16px; }
|
icon-size: 16px; }
|
||||||
|
|
||||||
.message-title {
|
.message-title {
|
||||||
font-weight: bold; }
|
font-weight: bold;
|
||||||
|
font-size: 1.1em; }
|
||||||
|
|
||||||
.message-content {
|
.message-content {
|
||||||
padding: 8px; }
|
padding: 8px;
|
||||||
|
font-size: .9em; }
|
||||||
|
|
||||||
.system-switch-user-submenu-icon {
|
.system-switch-user-submenu-icon.user-icon {
|
||||||
icon-size: 24px;
|
icon-size: 20px;
|
||||||
border: 1px solid rgba(238, 238, 236, 0.4); }
|
padding: 0 2px; }
|
||||||
|
|
||||||
|
.system-switch-user-submenu-icon.default-icon {
|
||||||
|
icon-size: 16px;
|
||||||
|
padding: 0 4px; }
|
||||||
|
|
||||||
#appMenu {
|
#appMenu {
|
||||||
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
|
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
|
||||||
@ -779,7 +836,7 @@ StScrollBar {
|
|||||||
color: transparent; }
|
color: transparent; }
|
||||||
|
|
||||||
.aggregate-menu {
|
.aggregate-menu {
|
||||||
width: 360px; }
|
min-width: 21em; }
|
||||||
.aggregate-menu .popup-menu-icon {
|
.aggregate-menu .popup-menu-icon {
|
||||||
padding: 0 4px; }
|
padding: 0 4px; }
|
||||||
|
|
||||||
@ -834,7 +891,8 @@ StScrollBar {
|
|||||||
min-width: 470px; }
|
min-width: 470px; }
|
||||||
|
|
||||||
.nm-dialog-content {
|
.nm-dialog-content {
|
||||||
spacing: 20px; }
|
spacing: 20px;
|
||||||
|
padding: 24px; }
|
||||||
|
|
||||||
.nm-dialog-header-hbox {
|
.nm-dialog-header-hbox {
|
||||||
spacing: 10px; }
|
spacing: 10px; }
|
||||||
@ -915,10 +973,14 @@ StScrollBar {
|
|||||||
.search-entry {
|
.search-entry {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
padding: 7px 9px;
|
padding: 7px 9px;
|
||||||
border-radius: 6px; }
|
border-radius: 6px;
|
||||||
|
border-color: #747467;
|
||||||
|
color: #eeeeec;
|
||||||
|
background-color: #2e3436; }
|
||||||
.search-entry:focus {
|
.search-entry:focus {
|
||||||
padding: 6px 8px;
|
padding: 6px 8px;
|
||||||
border-width: 2px; }
|
border-width: 2px;
|
||||||
|
border-color: #215d9c; }
|
||||||
.search-entry .search-entry-icon {
|
.search-entry .search-entry-icon {
|
||||||
icon-size: 1em;
|
icon-size: 1em;
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
@ -1016,7 +1078,7 @@ StScrollBar {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #222728;
|
background-color: #222728;
|
||||||
box-shadow: none;
|
box-shadow: inset 0 0 black;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
.app-view-control:first-child {
|
.app-view-control:first-child {
|
||||||
@ -1335,10 +1397,9 @@ StScrollBar {
|
|||||||
color: white; }
|
color: white; }
|
||||||
.keyboard-key:focus {
|
.keyboard-key:focus {
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
border-color: #215d9c;
|
|
||||||
box-shadow: inset 0 1px #454f52;
|
|
||||||
text-shadow: 0 1px black;
|
text-shadow: 0 1px black;
|
||||||
icon-shadow: 0 1px black; }
|
icon-shadow: 0 1px black;
|
||||||
|
box-shadow: inset 0px 0px 0px 1px #215d9c; }
|
||||||
.keyboard-key:hover, .keyboard-key:checked {
|
.keyboard-key:hover, .keyboard-key:checked {
|
||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
@ -1350,7 +1411,7 @@ StScrollBar {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #222728;
|
background-color: #222728;
|
||||||
box-shadow: none;
|
box-shadow: inset 0 0 black;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
.keyboard-key:grayed {
|
.keyboard-key:grayed {
|
||||||
@ -1443,13 +1504,13 @@ StScrollBar {
|
|||||||
color: white;
|
color: white;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: #1c5187;
|
background-color: #1c5187;
|
||||||
box-shadow: none;
|
box-shadow: inset 0 0 black;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
.login-dialog .modal-dialog-button:default:insensitive {
|
.login-dialog .modal-dialog-button:default:insensitive {
|
||||||
color: #939695;
|
color: #949796;
|
||||||
border-color: rgba(0, 0, 0, 0.7);
|
border-color: rgba(0, 0, 0, 0.7);
|
||||||
background-color: rgba(66, 71, 73, 0.7);
|
background-color: rgba(66, 72, 73, 0.7);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
icon-shadow: none; }
|
icon-shadow: none; }
|
||||||
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 98 KiB |
@ -14,7 +14,7 @@ const ShellEntry = imports.ui.shellEntry;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
|
|
||||||
const DEFAULT_BUTTON_WELL_ICON_SIZE = 24;
|
const DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
|
||||||
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
|
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
|
||||||
const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
|
const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
|
||||||
|
|
||||||
@ -189,7 +189,8 @@ const AuthPrompt = new Lang.Class({
|
|||||||
this._updateNextButtonSensitivity(this._entry.text.length > 0);
|
this._updateNextButtonSensitivity(this._entry.text.length > 0);
|
||||||
}));
|
}));
|
||||||
this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
|
this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
|
||||||
this.emit('next');
|
if (this.nextButton.reactive)
|
||||||
|
this.emit('next');
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -258,6 +259,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onVerificationComplete: function() {
|
_onVerificationComplete: function() {
|
||||||
|
this.setActorInDefaultButtonWell(null);
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
||||||
this.cancelButton.reactive = false;
|
this.cancelButton.reactive = false;
|
||||||
},
|
},
|
||||||
@ -281,6 +283,12 @@ const AuthPrompt = new Lang.Class({
|
|||||||
if (oldActor)
|
if (oldActor)
|
||||||
Tweener.removeTweens(oldActor);
|
Tweener.removeTweens(oldActor);
|
||||||
|
|
||||||
|
let wasSpinner;
|
||||||
|
if (oldActor == this._spinner.actor)
|
||||||
|
wasSpinner = true;
|
||||||
|
else
|
||||||
|
wasSpinner = false;
|
||||||
|
|
||||||
let isSpinner;
|
let isSpinner;
|
||||||
if (actor == this._spinner.actor)
|
if (actor == this._spinner.actor)
|
||||||
isSpinner = true;
|
isSpinner = true;
|
||||||
@ -290,6 +298,11 @@ const AuthPrompt = new Lang.Class({
|
|||||||
if (this._defaultButtonWellActor != actor && oldActor) {
|
if (this._defaultButtonWellActor != actor && oldActor) {
|
||||||
if (!animate) {
|
if (!animate) {
|
||||||
oldActor.opacity = 0;
|
oldActor.opacity = 0;
|
||||||
|
|
||||||
|
if (wasSpinner) {
|
||||||
|
if (this._spinner)
|
||||||
|
this._spinner.stop();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Tweener.addTween(oldActor,
|
Tweener.addTween(oldActor,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
@ -298,7 +311,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
transition: 'linear',
|
transition: 'linear',
|
||||||
onCompleteScope: this,
|
onCompleteScope: this,
|
||||||
onComplete: function() {
|
onComplete: function() {
|
||||||
if (isSpinner) {
|
if (wasSpinner) {
|
||||||
if (this._spinner)
|
if (this._spinner)
|
||||||
this._spinner.stop();
|
this._spinner.stop();
|
||||||
}
|
}
|
||||||
@ -401,7 +414,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
updateSensitivity: function(sensitive) {
|
updateSensitivity: function(sensitive) {
|
||||||
this._updateNextButtonSensitivity(sensitive);
|
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0);
|
||||||
this._entry.reactive = sensitive;
|
this._entry.reactive = sensitive;
|
||||||
this._entry.clutter_text.editable = sensitive;
|
this._entry.clutter_text.editable = sensitive;
|
||||||
},
|
},
|
||||||
@ -432,8 +445,9 @@ const AuthPrompt = new Lang.Class({
|
|||||||
let oldStatus = this.verificationStatus;
|
let oldStatus = this.verificationStatus;
|
||||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
||||||
this.cancelButton.reactive = true;
|
this.cancelButton.reactive = true;
|
||||||
|
this.nextButton.label = _("Next");
|
||||||
|
|
||||||
if (oldStatus == AuthPromptStatus.VERIFYING)
|
if (this._userVerifier)
|
||||||
this._userVerifier.cancel();
|
this._userVerifier.cancel();
|
||||||
|
|
||||||
this._queryingService = null;
|
this._queryingService = null;
|
||||||
@ -488,6 +502,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
|
|
||||||
finish: function(onComplete) {
|
finish: function(onComplete) {
|
||||||
if (!this._userVerifier.hasPendingMessages) {
|
if (!this._userVerifier.hasPendingMessages) {
|
||||||
|
this._userVerifier.clear();
|
||||||
onComplete();
|
onComplete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -495,12 +510,13 @@ const AuthPrompt = new Lang.Class({
|
|||||||
let signalId = this._userVerifier.connect('no-more-messages',
|
let signalId = this._userVerifier.connect('no-more-messages',
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
this._userVerifier.disconnect(signalId);
|
this._userVerifier.disconnect(signalId);
|
||||||
|
this._userVerifier.clear();
|
||||||
onComplete();
|
onComplete();
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
cancel: function() {
|
cancel: function() {
|
||||||
if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
|
if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.reset();
|
this.reset();
|
||||||
|
@ -16,6 +16,34 @@
|
|||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In order for transformation animations to look good, they need to be
|
||||||
|
* incremental and have some order to them (e.g., fade out hidden items,
|
||||||
|
* then shrink to close the void left over). Chaining animations in this way can
|
||||||
|
* be error-prone and wordy using just Tweener callbacks.
|
||||||
|
*
|
||||||
|
* The classes in this file help with this:
|
||||||
|
*
|
||||||
|
* - Task. encapsulates schedulable work to be run in a specific scope.
|
||||||
|
*
|
||||||
|
* - ConsecutiveBatch. runs a series of tasks in order and completes
|
||||||
|
* when the last in the series finishes.
|
||||||
|
*
|
||||||
|
* - ConcurrentBatch. runs a set of tasks at the same time and completes
|
||||||
|
* when the last to finish completes.
|
||||||
|
*
|
||||||
|
* - Hold. prevents a batch from completing the pending task until
|
||||||
|
* the hold is released.
|
||||||
|
*
|
||||||
|
* The tasks associated with a batch are specified in a list at batch
|
||||||
|
* construction time as either task objects or plain functions.
|
||||||
|
* Batches are task objects, themselves, so they can be nested.
|
||||||
|
*
|
||||||
|
* These classes aren't specific to GDM, but were found to be unintuitive and so
|
||||||
|
* are not used elsewhere. These APIs may ultimately get dropped entirely and
|
||||||
|
* replaced by something else.
|
||||||
|
*/
|
||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ const UserListItem = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
this._user.disconnect(this._userChangedId);
|
this.user.disconnect(this._userChangedId);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onClicked: function() {
|
_onClicked: function() {
|
||||||
@ -212,6 +212,10 @@ const UserList = new Lang.Class({
|
|||||||
return item;
|
return item;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
containsUser: function(user) {
|
||||||
|
return this._items[user.get_user_name()] != null;
|
||||||
|
},
|
||||||
|
|
||||||
addUser: function(user) {
|
addUser: function(user) {
|
||||||
if (!user.is_loaded)
|
if (!user.is_loaded)
|
||||||
return;
|
return;
|
||||||
@ -535,6 +539,9 @@ const LoginDialog = new Lang.Class({
|
|||||||
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
|
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
|
||||||
let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2;
|
let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2;
|
||||||
|
|
||||||
|
natWidth = Math.min(natWidth, dialogBox.x2 - dialogBox.x1);
|
||||||
|
natHeight = Math.min(natHeight, dialogBox.y2 - dialogBox.y1);
|
||||||
|
|
||||||
actorBox.x1 = Math.floor(centerX - natWidth / 2);
|
actorBox.x1 = Math.floor(centerX - natWidth / 2);
|
||||||
actorBox.y1 = Math.floor(centerY - natHeight / 2);
|
actorBox.y1 = Math.floor(centerY - natHeight / 2);
|
||||||
actorBox.x2 = actorBox.x1 + natWidth;
|
actorBox.x2 = actorBox.x1 + natWidth;
|
||||||
@ -874,7 +881,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_loginScreenSessionActivated: function() {
|
_loginScreenSessionActivated: function() {
|
||||||
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED)
|
if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Tweener.addTween(this.actor,
|
Tweener.addTween(this.actor,
|
||||||
@ -891,7 +898,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
onUpdateScope: this,
|
onUpdateScope: this,
|
||||||
onComplete: function() {
|
onComplete: function() {
|
||||||
this._authPrompt.reset();
|
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
||||||
|
this._authPrompt.reset();
|
||||||
},
|
},
|
||||||
onCompleteScope: this });
|
onCompleteScope: this });
|
||||||
},
|
},
|
||||||
@ -920,11 +928,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
onUpdateScope: this,
|
onUpdateScope: this,
|
||||||
onComplete: function() {
|
onComplete: function() {
|
||||||
let id = Mainloop.idle_add(Lang.bind(this, function() {
|
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
|
||||||
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
}));
|
|
||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] this._greeter.call_start_session_when_ready_sync');
|
|
||||||
},
|
},
|
||||||
onCompleteScope: this });
|
onCompleteScope: this });
|
||||||
},
|
},
|
||||||
@ -1126,6 +1130,10 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userManager.disconnect(this._userRemovedId);
|
this._userManager.disconnect(this._userRemovedId);
|
||||||
this._userRemovedId = 0;
|
this._userRemovedId = 0;
|
||||||
}
|
}
|
||||||
|
if (this._userChangedId) {
|
||||||
|
this._userManager.disconnect(this._userChangedId);
|
||||||
|
this._userChangedId = 0;
|
||||||
|
}
|
||||||
this._textureCache.disconnect(this._updateLogoTextureId);
|
this._textureCache.disconnect(this._updateLogoTextureId);
|
||||||
Main.layoutManager.disconnect(this._startupCompleteId);
|
Main.layoutManager.disconnect(this._startupCompleteId);
|
||||||
if (this._settings) {
|
if (this._settings) {
|
||||||
@ -1172,6 +1180,14 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userList.removeUser(user);
|
this._userList.removeUser(user);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
this._userChangedId = this._userManager.connect('user-changed',
|
||||||
|
Lang.bind(this, function(userManager, user) {
|
||||||
|
if (this._userList.containsUser(user) && user.locked)
|
||||||
|
this._userList.removeUser(user);
|
||||||
|
else if (!this._userList.containsUser(user) && !user.locked)
|
||||||
|
this._userList.addUser(user);
|
||||||
|
}));
|
||||||
|
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -448,8 +448,6 @@ const AppSwitcher = new Lang.Class({
|
|||||||
});
|
});
|
||||||
if (appIcon.cachedWindows.length > 0)
|
if (appIcon.cachedWindows.length > 0)
|
||||||
this._addIcon(appIcon);
|
this._addIcon(appIcon);
|
||||||
else if (workspace == null)
|
|
||||||
throw new Error('%s appears to be running, but doesn\'t have any windows'.format(appIcon.app.get_name()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._curApp = -1;
|
this._curApp = -1;
|
||||||
@ -687,15 +685,17 @@ const WindowIcon = new Lang.Class({
|
|||||||
|
|
||||||
this._icon.destroy_all_children();
|
this._icon.destroy_all_children();
|
||||||
|
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case AppIconMode.THUMBNAIL_ONLY:
|
case AppIconMode.THUMBNAIL_ONLY:
|
||||||
size = WINDOW_PREVIEW_SIZE;
|
size = WINDOW_PREVIEW_SIZE;
|
||||||
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
|
this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AppIconMode.BOTH:
|
case AppIconMode.BOTH:
|
||||||
size = WINDOW_PREVIEW_SIZE;
|
size = WINDOW_PREVIEW_SIZE;
|
||||||
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
|
this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor));
|
||||||
|
|
||||||
if (this.app)
|
if (this.app)
|
||||||
this._icon.add_actor(this._createAppIcon(this.app,
|
this._icon.add_actor(this._createAppIcon(this.app,
|
||||||
@ -707,7 +707,7 @@ const WindowIcon = new Lang.Class({
|
|||||||
this._icon.add_actor(this._createAppIcon(this.app, size));
|
this._icon.add_actor(this._createAppIcon(this.app, size));
|
||||||
}
|
}
|
||||||
|
|
||||||
this._icon.set_size(size, size);
|
this._icon.set_size(size * scaleFactor, size * scaleFactor);
|
||||||
},
|
},
|
||||||
|
|
||||||
_createAppIcon: function(app, size) {
|
_createAppIcon: function(app, size) {
|
||||||
|
@ -7,7 +7,7 @@ const St = imports.gi.St;
|
|||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Atk = imports.gi.Atk;
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
const ANIMATED_ICON_UPDATE_TIMEOUT = 16;
|
||||||
|
|
||||||
const Animation = new Lang.Class({
|
const Animation = new Lang.Class({
|
||||||
Name: 'Animation',
|
Name: 'Animation',
|
||||||
@ -33,7 +33,7 @@ const Animation = new Lang.Class({
|
|||||||
if (this._frame == 0)
|
if (this._frame == 0)
|
||||||
this._showFrame(0);
|
this._showFrame(0);
|
||||||
|
|
||||||
this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
|
this._timeoutId = GLib.timeout_add(GLib.PRIORITY_LOW, this._speed, Lang.bind(this, this._update));
|
||||||
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update');
|
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,6 +500,11 @@ const AllView = new Lang.Class({
|
|||||||
|
|
||||||
_loadApps: function() {
|
_loadApps: function() {
|
||||||
let apps = Gio.AppInfo.get_all().filter(function(appInfo) {
|
let apps = Gio.AppInfo.get_all().filter(function(appInfo) {
|
||||||
|
try {
|
||||||
|
let id = appInfo.get_id(); // catch invalid file encodings
|
||||||
|
} catch(e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return appInfo.should_show();
|
return appInfo.should_show();
|
||||||
}).map(function(app) {
|
}).map(function(app) {
|
||||||
return app.get_id();
|
return app.get_id();
|
||||||
@ -1061,7 +1066,7 @@ const AppSearchProvider = new Lang.Class({
|
|||||||
|
|
||||||
getInitialResultSet: function(terms, callback, cancellable) {
|
getInitialResultSet: function(terms, callback, cancellable) {
|
||||||
let query = terms.join(' ');
|
let query = terms.join(' ');
|
||||||
let groups = Gio.DesktopAppInfo.search(query);
|
let groups = Shell.AppSystem.search(query);
|
||||||
let usage = Shell.AppUsage.get_default();
|
let usage = Shell.AppUsage.get_default();
|
||||||
let results = [];
|
let results = [];
|
||||||
groups.forEach(function(group) {
|
groups.forEach(function(group) {
|
||||||
@ -1290,7 +1295,10 @@ const FolderIcon = new Lang.Class({
|
|||||||
if (!_listsIntersect(folderCategories, appCategories))
|
if (!_listsIntersect(folderCategories, appCategories))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
addAppId(appInfo.get_id());
|
try {
|
||||||
|
addAppId(appInfo.get_id()); // catch invalid file encodings
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.actor.visible = this.view.getAllItems().length > 0;
|
this.actor.visible = this.view.getAllItems().length > 0;
|
||||||
|
@ -26,6 +26,7 @@ const RENAMED_DESKTOP_IDS = {
|
|||||||
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
||||||
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
||||||
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
||||||
|
'gnome-terminal.desktop': 'org.gnome.Terminal.desktop',
|
||||||
'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop',
|
'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop',
|
||||||
'gnomine.desktop': 'gnome-mines.desktop',
|
'gnomine.desktop': 'gnome-mines.desktop',
|
||||||
'gnotravex.desktop': 'gnome-tetravex.desktop',
|
'gnotravex.desktop': 'gnome-tetravex.desktop',
|
||||||
|
@ -144,6 +144,7 @@ const BackgroundCache = new Lang.Class({
|
|||||||
this._pendingFileLoads = [];
|
this._pendingFileLoads = [];
|
||||||
this._fileMonitors = {};
|
this._fileMonitors = {};
|
||||||
this._backgroundSources = {};
|
this._backgroundSources = {};
|
||||||
|
this._animations = {};
|
||||||
},
|
},
|
||||||
|
|
||||||
monitorFile: function(file) {
|
monitorFile: function(file) {
|
||||||
@ -162,12 +163,13 @@ const BackgroundCache = new Lang.Class({
|
|||||||
|
|
||||||
getAnimation: function(params) {
|
getAnimation: function(params) {
|
||||||
params = Params.parse(params, { file: null,
|
params = Params.parse(params, { file: null,
|
||||||
|
settingsSchema: null,
|
||||||
onLoaded: null });
|
onLoaded: null });
|
||||||
|
|
||||||
if (_fileEqual0(this._animationFile, params.file)) {
|
if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) {
|
||||||
if (params.onLoaded) {
|
if (params.onLoaded) {
|
||||||
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
|
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
|
||||||
params.onLoaded(this._animation);
|
params.onLoaded(this._animations[params.settingsSchema]);
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
}));
|
}));
|
||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
|
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
|
||||||
@ -178,12 +180,11 @@ const BackgroundCache = new Lang.Class({
|
|||||||
let animation = new Animation({ file: params.file });
|
let animation = new Animation({ file: params.file });
|
||||||
|
|
||||||
animation.load(Lang.bind(this, function() {
|
animation.load(Lang.bind(this, function() {
|
||||||
this._animationFile = params.file;
|
this._animations[params.settingsSchema] = animation;
|
||||||
this._animation = animation;
|
|
||||||
|
|
||||||
if (params.onLoaded) {
|
if (params.onLoaded) {
|
||||||
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
|
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
|
||||||
params.onLoaded(this._animation);
|
params.onLoaded(this._animations[params.settingsSchema]);
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
}));
|
}));
|
||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
|
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
|
||||||
@ -246,6 +247,13 @@ const Background = new Lang.Class({
|
|||||||
this._cancellable = new Gio.Cancellable();
|
this._cancellable = new Gio.Cancellable();
|
||||||
this.isLoaded = false;
|
this.isLoaded = false;
|
||||||
|
|
||||||
|
this._clock = new GnomeDesktop.WallClock();
|
||||||
|
this._timezoneChangedId = this._clock.connect('notify::timezone',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
if (this._animation)
|
||||||
|
this._loadAnimation(this._animation.file);
|
||||||
|
}));
|
||||||
|
|
||||||
this._settingsChangedSignalId = this._settings.connect('changed', Lang.bind(this, function() {
|
this._settingsChangedSignalId = this._settings.connect('changed', Lang.bind(this, function() {
|
||||||
this.emit('changed');
|
this.emit('changed');
|
||||||
}));
|
}));
|
||||||
@ -264,6 +272,10 @@ const Background = new Lang.Class({
|
|||||||
}
|
}
|
||||||
this._fileWatches = null;
|
this._fileWatches = null;
|
||||||
|
|
||||||
|
if (this._timezoneChangedId != 0)
|
||||||
|
this._clock.disconnect(this._timezoneChangedId);
|
||||||
|
this._timezoneChangedId = 0;
|
||||||
|
|
||||||
if (this._settingsChangedSignalId != 0)
|
if (this._settingsChangedSignalId != 0)
|
||||||
this._settings.disconnect(this._settingsChangedSignalId);
|
this._settings.disconnect(this._settingsChangedSignalId);
|
||||||
this._settingsChangedSignalId = 0;
|
this._settingsChangedSignalId = 0;
|
||||||
@ -403,17 +415,18 @@ const Background = new Lang.Class({
|
|||||||
|
|
||||||
_loadAnimation: function(file) {
|
_loadAnimation: function(file) {
|
||||||
this._cache.getAnimation({ file: file,
|
this._cache.getAnimation({ file: file,
|
||||||
onLoaded: Lang.bind(this, function(animation) {
|
settingsSchema: this._settings.schema_id,
|
||||||
this._animation = animation;
|
onLoaded: Lang.bind(this, function(animation) {
|
||||||
|
this._animation = animation;
|
||||||
|
|
||||||
if (!this._animation || this._cancellable.is_cancelled()) {
|
if (!this._animation || this._cancellable.is_cancelled()) {
|
||||||
this._setLoaded();
|
this._setLoaded();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._updateAnimation();
|
this._updateAnimation();
|
||||||
this._watchFile(file);
|
this._watchFile(file);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@ const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
|
|||||||
const SHOW_WEEKDATE_KEY = 'show-weekdate';
|
const SHOW_WEEKDATE_KEY = 'show-weekdate';
|
||||||
const ELLIPSIS_CHAR = '\u2026';
|
const ELLIPSIS_CHAR = '\u2026';
|
||||||
|
|
||||||
|
const MESSAGE_ICON_SIZE = 32;
|
||||||
|
|
||||||
const MESSAGE_ANIMATION_TIME = 0.1;
|
const MESSAGE_ANIMATION_TIME = 0.1;
|
||||||
|
|
||||||
const DEFAULT_EXPAND_LINES = 6;
|
const DEFAULT_EXPAND_LINES = 6;
|
||||||
@ -723,7 +725,8 @@ const Calendar = new Lang.Class({
|
|||||||
// nRows here means 6 weeks + one header + one navbar
|
// nRows here means 6 weeks + one header + one navbar
|
||||||
let nRows = 8;
|
let nRows = 8;
|
||||||
while (row < 8) {
|
while (row < 8) {
|
||||||
let button = new St.Button({ label: iter.getDate().toString(),
|
// xgettext:no-javascript-format
|
||||||
|
let button = new St.Button({ label: iter.toLocaleFormat(C_("date day number format", "%d")),
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
let rtl = button.get_text_direction() == Clutter.TextDirection.RTL;
|
let rtl = button.get_text_direction() == Clutter.TextDirection.RTL;
|
||||||
|
|
||||||
@ -976,7 +979,6 @@ const Message = new Lang.Class({
|
|||||||
this._iconBin = new St.Bin({ style_class: 'message-icon-bin',
|
this._iconBin = new St.Bin({ style_class: 'message-icon-bin',
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
visible: false });
|
visible: false });
|
||||||
this._iconBin.set_y_align(Clutter.ActorAlign.START);
|
|
||||||
hbox.add_actor(this._iconBin);
|
hbox.add_actor(this._iconBin);
|
||||||
|
|
||||||
let contentBox = new St.BoxLayout({ style_class: 'message-content',
|
let contentBox = new St.BoxLayout({ style_class: 'message-content',
|
||||||
@ -1229,7 +1231,7 @@ const NotificationMessage = new Lang.Class({
|
|||||||
this._closed = true;
|
this._closed = true;
|
||||||
this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
|
this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
|
||||||
}));
|
}));
|
||||||
notification.connect('destroy', Lang.bind(this,
|
this._destroyId = notification.connect('destroy', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
if (!this._closed)
|
if (!this._closed)
|
||||||
this.close();
|
this.close();
|
||||||
@ -1240,9 +1242,10 @@ const NotificationMessage = new Lang.Class({
|
|||||||
|
|
||||||
_getIcon: function() {
|
_getIcon: function() {
|
||||||
if (this.notification.gicon)
|
if (this.notification.gicon)
|
||||||
return new St.Icon({ gicon: this.notification.gicon, icon_size: 48 });
|
return new St.Icon({ gicon: this.notification.gicon,
|
||||||
|
icon_size: MESSAGE_ICON_SIZE });
|
||||||
else
|
else
|
||||||
return this.notification.source.createIcon(48);
|
return this.notification.source.createIcon(MESSAGE_ICON_SIZE);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onUpdated: function(n, clear) {
|
_onUpdated: function(n, clear) {
|
||||||
@ -1260,6 +1263,10 @@ const NotificationMessage = new Lang.Class({
|
|||||||
if (this._updatedId)
|
if (this._updatedId)
|
||||||
this.notification.disconnect(this._updatedId);
|
this.notification.disconnect(this._updatedId);
|
||||||
this._updatedId = 0;
|
this._updatedId = 0;
|
||||||
|
|
||||||
|
if (this._destroyId)
|
||||||
|
this.notification.disconnect(this._destroyId);
|
||||||
|
this._destroyId = 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -313,6 +313,10 @@ const AutorunSource = new Lang.Class({
|
|||||||
|
|
||||||
getIcon: function() {
|
getIcon: function() {
|
||||||
return this.mount.get_icon();
|
return this.mount.get_icon();
|
||||||
|
},
|
||||||
|
|
||||||
|
_createPolicy: function() {
|
||||||
|
return new MessageTray.NotificationApplicationPolicy('org.gnome.Nautilus');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -325,9 +329,6 @@ const AutorunNotification = new Lang.Class({
|
|||||||
|
|
||||||
this._manager = manager;
|
this._manager = manager;
|
||||||
this._mount = source.mount;
|
this._mount = source.mount;
|
||||||
|
|
||||||
// set the notification to urgent, so that it expands out
|
|
||||||
this.setUrgency(MessageTray.Urgency.CRITICAL);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
createBanner: function() {
|
createBanner: function() {
|
||||||
|
@ -9,9 +9,15 @@ const Gio = imports.gi.Gio;
|
|||||||
const GObject = imports.gi.GObject;
|
const GObject = imports.gi.GObject;
|
||||||
const Gcr = imports.gi.Gcr;
|
const Gcr = imports.gi.Gcr;
|
||||||
|
|
||||||
|
const Animation = imports.ui.animation;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const CheckBox = imports.ui.checkBox;
|
const CheckBox = imports.ui.checkBox;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
const WORK_SPINNER_ICON_SIZE = 16;
|
||||||
|
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
||||||
|
const WORK_SPINNER_ANIMATION_TIME = 0.3;
|
||||||
|
|
||||||
const KeyringDialog = new Lang.Class({
|
const KeyringDialog = new Lang.Class({
|
||||||
Name: 'KeyringDialog',
|
Name: 'KeyringDialog',
|
||||||
@ -58,27 +64,47 @@ const KeyringDialog = new Lang.Class({
|
|||||||
{ y_fill: true,
|
{ y_fill: true,
|
||||||
y_align: St.Align.START });
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
this._workSpinner = null;
|
||||||
this._controlTable = null;
|
this._controlTable = null;
|
||||||
|
|
||||||
|
|
||||||
this._cancelButton = this.addButton({ label: '',
|
this._cancelButton = this.addButton({ label: '',
|
||||||
action: Lang.bind(this, this._onCancelButton),
|
action: Lang.bind(this, this._onCancelButton),
|
||||||
key: Clutter.Escape },
|
key: Clutter.Escape });
|
||||||
{ expand: true, x_fill: false, x_align: St.Align.START });
|
|
||||||
this.placeSpinner({ expand: false,
|
|
||||||
x_fill: false,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.END,
|
|
||||||
y_align: St.Align.MIDDLE });
|
|
||||||
this._continueButton = this.addButton({ label: '',
|
this._continueButton = this.addButton({ label: '',
|
||||||
action: Lang.bind(this, this._onContinueButton),
|
action: Lang.bind(this, this._onContinueButton),
|
||||||
default: true },
|
default: true });
|
||||||
{ expand: false, x_fill: false, x_align: St.Align.END });
|
|
||||||
|
|
||||||
this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE);
|
this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE);
|
||||||
this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
|
this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_setWorking: function(working) {
|
||||||
|
if (!this._workSpinner)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Tweener.removeTweens(this._workSpinner.actor);
|
||||||
|
if (working) {
|
||||||
|
this._workSpinner.play();
|
||||||
|
Tweener.addTween(this._workSpinner.actor,
|
||||||
|
{ opacity: 255,
|
||||||
|
delay: WORK_SPINNER_ANIMATION_DELAY,
|
||||||
|
time: WORK_SPINNER_ANIMATION_TIME,
|
||||||
|
transition: 'linear'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Tweener.addTween(this._workSpinner.actor,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: WORK_SPINNER_ANIMATION_TIME,
|
||||||
|
transition: 'linear',
|
||||||
|
onCompleteScope: this,
|
||||||
|
onComplete: function() {
|
||||||
|
if (this._workSpinner)
|
||||||
|
this._workSpinner.stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_buildControlTable: function() {
|
_buildControlTable: function() {
|
||||||
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
|
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
|
||||||
let table = new St.Widget({ style_class: 'keyring-dialog-control-table',
|
let table = new St.Widget({ style_class: 'keyring-dialog-control-table',
|
||||||
@ -101,15 +127,22 @@ const KeyringDialog = new Lang.Class({
|
|||||||
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
||||||
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate));
|
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate));
|
||||||
|
|
||||||
|
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
|
||||||
|
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
|
||||||
|
this._workSpinner.actor.opacity = 0;
|
||||||
|
|
||||||
if (rtl) {
|
if (rtl) {
|
||||||
layout.attach(this._passwordEntry, 0, row, 1, 1);
|
layout.attach(this._workSpinner.actor, 0, row, 1, 1);
|
||||||
layout.attach(label, 1, row, 1, 1);
|
layout.attach(this._passwordEntry, 1, row, 1, 1);
|
||||||
|
layout.attach(label, 2, row, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
layout.attach(label, 0, row, 1, 1);
|
layout.attach(label, 0, row, 1, 1);
|
||||||
layout.attach(this._passwordEntry, 1, row, 1, 1);
|
layout.attach(this._passwordEntry, 1, row, 1, 1);
|
||||||
|
layout.attach(this._workSpinner.actor, 2, row, 1, 1);
|
||||||
}
|
}
|
||||||
row++;
|
row++;
|
||||||
} else {
|
} else {
|
||||||
|
this._workSpinner = null;
|
||||||
this._passwordEntry = null;
|
this._passwordEntry = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +211,7 @@ const KeyringDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._continueButton.can_focus = sensitive;
|
this._continueButton.can_focus = sensitive;
|
||||||
this._continueButton.reactive = sensitive;
|
this._continueButton.reactive = sensitive;
|
||||||
this.setWorking(!sensitive);
|
this._setWorking(!sensitive);
|
||||||
},
|
},
|
||||||
|
|
||||||
_ensureOpen: function() {
|
_ensureOpen: function() {
|
||||||
|
@ -13,13 +13,19 @@ const Mainloop = imports.mainloop;
|
|||||||
const Polkit = imports.gi.Polkit;
|
const Polkit = imports.gi.Polkit;
|
||||||
const PolkitAgent = imports.gi.PolkitAgent;
|
const PolkitAgent = imports.gi.PolkitAgent;
|
||||||
|
|
||||||
|
const Animation = imports.ui.animation;
|
||||||
const Components = imports.ui.components;
|
const Components = imports.ui.components;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
const DIALOG_ICON_SIZE = 48;
|
const DIALOG_ICON_SIZE = 48;
|
||||||
|
|
||||||
|
const WORK_SPINNER_ICON_SIZE = 16;
|
||||||
|
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
||||||
|
const WORK_SPINNER_ANIMATION_TIME = 0.3;
|
||||||
|
|
||||||
const AuthenticationDialog = new Lang.Class({
|
const AuthenticationDialog = new Lang.Class({
|
||||||
Name: 'AuthenticationDialog',
|
Name: 'AuthenticationDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
@ -136,6 +142,13 @@ const AuthenticationDialog = new Lang.Class({
|
|||||||
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
|
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
|
||||||
this._passwordBox.add(this._passwordEntry,
|
this._passwordBox.add(this._passwordEntry,
|
||||||
{ expand: true });
|
{ expand: true });
|
||||||
|
|
||||||
|
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
|
||||||
|
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
|
||||||
|
this._workSpinner.actor.opacity = 0;
|
||||||
|
|
||||||
|
this._passwordBox.add(this._workSpinner.actor);
|
||||||
|
|
||||||
this.setInitialKeyFocus(this._passwordEntry);
|
this.setInitialKeyFocus(this._passwordEntry);
|
||||||
this._passwordBox.hide();
|
this._passwordBox.hide();
|
||||||
|
|
||||||
@ -165,17 +178,10 @@ const AuthenticationDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._cancelButton = this.addButton({ label: _("Cancel"),
|
this._cancelButton = this.addButton({ label: _("Cancel"),
|
||||||
action: Lang.bind(this, this.cancel),
|
action: Lang.bind(this, this.cancel),
|
||||||
key: Clutter.Escape },
|
key: Clutter.Escape });
|
||||||
{ expand: true, x_fill: false, x_align: St.Align.START });
|
|
||||||
this.placeSpinner({ expand: false,
|
|
||||||
x_fill: false,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.END,
|
|
||||||
y_align: St.Align.MIDDLE });
|
|
||||||
this._okButton = this.addButton({ label: _("Authenticate"),
|
this._okButton = this.addButton({ label: _("Authenticate"),
|
||||||
action: Lang.bind(this, this._onAuthenticateButtonPressed),
|
action: Lang.bind(this, this._onAuthenticateButtonPressed),
|
||||||
default: true },
|
default: true });
|
||||||
{ expand: false, x_fill: false, x_align: St.Align.END });
|
|
||||||
|
|
||||||
this._doneEmitted = false;
|
this._doneEmitted = false;
|
||||||
|
|
||||||
@ -183,6 +189,30 @@ const AuthenticationDialog = new Lang.Class({
|
|||||||
this._cookie = cookie;
|
this._cookie = cookie;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_setWorking: function(working) {
|
||||||
|
Tweener.removeTweens(this._workSpinner.actor);
|
||||||
|
if (working) {
|
||||||
|
this._workSpinner.play();
|
||||||
|
Tweener.addTween(this._workSpinner.actor,
|
||||||
|
{ opacity: 255,
|
||||||
|
delay: WORK_SPINNER_ANIMATION_DELAY,
|
||||||
|
time: WORK_SPINNER_ANIMATION_TIME,
|
||||||
|
transition: 'linear'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Tweener.addTween(this._workSpinner.actor,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: WORK_SPINNER_ANIMATION_TIME,
|
||||||
|
transition: 'linear',
|
||||||
|
onCompleteScope: this,
|
||||||
|
onComplete: function() {
|
||||||
|
if (this._workSpinner)
|
||||||
|
this._workSpinner.stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
performAuthentication: function() {
|
performAuthentication: function() {
|
||||||
this.destroySession();
|
this.destroySession();
|
||||||
this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
|
this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
|
||||||
@ -229,7 +259,7 @@ const AuthenticationDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._okButton.can_focus = sensitive;
|
this._okButton.can_focus = sensitive;
|
||||||
this._okButton.reactive = sensitive;
|
this._okButton.reactive = sensitive;
|
||||||
this.setWorking(!sensitive);
|
this._setWorking(!sensitive);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onEntryActivate: function() {
|
_onEntryActivate: function() {
|
||||||
|
@ -303,6 +303,8 @@ const ChatSource = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_createPolicy: function() {
|
_createPolicy: function() {
|
||||||
|
if (this._account.protocol_name == 'irc')
|
||||||
|
return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari');
|
||||||
return new MessageTray.NotificationApplicationPolicy('empathy');
|
return new MessageTray.NotificationApplicationPolicy('empathy');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -644,15 +644,14 @@ const Dash = new Lang.Class({
|
|||||||
let firstIcon = firstButton._delegate.icon;
|
let firstIcon = firstButton._delegate.icon;
|
||||||
|
|
||||||
let minHeight, natHeight;
|
let minHeight, natHeight;
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
|
||||||
// Enforce the current icon size during the size request
|
// Enforce the current icon size during the size request
|
||||||
firstIcon.setIconSize(this.iconSize);
|
firstIcon.icon.ensure_style();
|
||||||
|
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
|
||||||
|
firstIcon.icon.set_size(this.iconSize * scaleFactor, this.iconSize * scaleFactor);
|
||||||
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
|
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
|
||||||
|
firstIcon.icon.set_size(currentWidth, currentHeight);
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
|
||||||
let iconSizes = baseIconSizes.map(function(s) {
|
|
||||||
return s * scaleFactor;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Subtract icon padding and box spacing from the available height
|
// Subtract icon padding and box spacing from the available height
|
||||||
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
|
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
|
||||||
@ -660,6 +659,10 @@ const Dash = new Lang.Class({
|
|||||||
|
|
||||||
let availSize = availHeight / iconChildren.length;
|
let availSize = availHeight / iconChildren.length;
|
||||||
|
|
||||||
|
let iconSizes = baseIconSizes.map(function(s) {
|
||||||
|
return s * scaleFactor;
|
||||||
|
});
|
||||||
|
|
||||||
let newIconSize = baseIconSizes[0];
|
let newIconSize = baseIconSizes[0];
|
||||||
for (let i = 0; i < iconSizes.length; i++) {
|
for (let i = 0; i < iconSizes.length; i++) {
|
||||||
if (iconSizes[i] < availSize)
|
if (iconSizes[i] < availSize)
|
||||||
|
71
js/ui/dnd.js
71
js/ui/dnd.js
@ -79,9 +79,12 @@ const _Draggable = new Lang.Class({
|
|||||||
dragActorOpacity: undefined });
|
dragActorOpacity: undefined });
|
||||||
|
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
if (!params.manualMode)
|
if (!params.manualMode) {
|
||||||
this.actor.connect('button-press-event',
|
this.actor.connect('button-press-event',
|
||||||
Lang.bind(this, this._onButtonPress));
|
Lang.bind(this, this._onButtonPress));
|
||||||
|
this.actor.connect('touch-event',
|
||||||
|
Lang.bind(this, this._onTouchEvent));
|
||||||
|
}
|
||||||
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, function() {
|
this.actor.connect('destroy', Lang.bind(this, function() {
|
||||||
this._actorDestroyed = true;
|
this._actorDestroyed = true;
|
||||||
@ -121,8 +124,50 @@ const _Draggable = new Lang.Class({
|
|||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onTouchEvent: function (actor, event) {
|
||||||
|
if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
|
||||||
|
!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
if (Tweener.getTweenCount(actor))
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
this._touchSequence = event.get_event_sequence();
|
||||||
|
|
||||||
|
this._buttonDown = true;
|
||||||
|
this._grabActor();
|
||||||
|
|
||||||
|
let [stageX, stageY] = event.get_coords();
|
||||||
|
this._dragStartX = stageX;
|
||||||
|
this._dragStartY = stageY;
|
||||||
|
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
},
|
||||||
|
|
||||||
|
_grabDevice: function(actor) {
|
||||||
|
let manager = Clutter.DeviceManager.get_default();
|
||||||
|
let pointer = manager.get_core_device(Clutter.InputDeviceType.POINTER_DEVICE);
|
||||||
|
|
||||||
|
if (pointer && this._touchSequence)
|
||||||
|
pointer.sequence_grab(this._touchSequence, actor);
|
||||||
|
else if (pointer)
|
||||||
|
pointer.grab (actor);
|
||||||
|
|
||||||
|
this._grabbedDevice = pointer;
|
||||||
|
},
|
||||||
|
|
||||||
|
_ungrabDevice: function() {
|
||||||
|
if (this._touchSequence)
|
||||||
|
this._grabbedDevice.sequence_ungrab (this._touchSequence);
|
||||||
|
else
|
||||||
|
this._grabbedDevice.ungrab();
|
||||||
|
|
||||||
|
this._touchSequence = null;
|
||||||
|
this._grabbedDevice = null;
|
||||||
|
},
|
||||||
|
|
||||||
_grabActor: function() {
|
_grabActor: function() {
|
||||||
Clutter.grab_pointer(this.actor);
|
this._grabDevice(this.actor);
|
||||||
this._onEventId = this.actor.connect('event',
|
this._onEventId = this.actor.connect('event',
|
||||||
Lang.bind(this, this._onEvent));
|
Lang.bind(this, this._onEvent));
|
||||||
},
|
},
|
||||||
@ -131,7 +176,7 @@ const _Draggable = new Lang.Class({
|
|||||||
if (!this._onEventId)
|
if (!this._onEventId)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Clutter.ungrab_pointer();
|
this._ungrabDevice();
|
||||||
this.actor.disconnect(this._onEventId);
|
this.actor.disconnect(this._onEventId);
|
||||||
this._onEventId = null;
|
this._onEventId = null;
|
||||||
},
|
},
|
||||||
@ -140,13 +185,13 @@ const _Draggable = new Lang.Class({
|
|||||||
if (!this._eventsGrabbed) {
|
if (!this._eventsGrabbed) {
|
||||||
this._eventsGrabbed = Main.pushModal(_getEventHandlerActor());
|
this._eventsGrabbed = Main.pushModal(_getEventHandlerActor());
|
||||||
if (this._eventsGrabbed)
|
if (this._eventsGrabbed)
|
||||||
Clutter.grab_pointer(_getEventHandlerActor());
|
this._grabDevice(_getEventHandlerActor());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_ungrabEvents: function() {
|
_ungrabEvents: function() {
|
||||||
if (this._eventsGrabbed) {
|
if (this._eventsGrabbed) {
|
||||||
Clutter.ungrab_pointer();
|
this._ungrabDevice();
|
||||||
Main.popModal(_getEventHandlerActor());
|
Main.popModal(_getEventHandlerActor());
|
||||||
this._eventsGrabbed = false;
|
this._eventsGrabbed = false;
|
||||||
}
|
}
|
||||||
@ -157,7 +202,9 @@ const _Draggable = new Lang.Class({
|
|||||||
// didn't start the drag, to drop the draggable in case the drag was in progress, and
|
// didn't start the drag, to drop the draggable in case the drag was in progress, and
|
||||||
// to complete the drag and ensure that whatever happens to be under the pointer does
|
// to complete the drag and ensure that whatever happens to be under the pointer does
|
||||||
// not get triggered if the drag was cancelled with Esc.
|
// not get triggered if the drag was cancelled with Esc.
|
||||||
if (event.type() == Clutter.EventType.BUTTON_RELEASE) {
|
if (event.type() == Clutter.EventType.BUTTON_RELEASE ||
|
||||||
|
(event.type() == Clutter.EventType.TOUCH_END &&
|
||||||
|
global.display.is_pointer_emulating_sequence(event.get_event_sequence()))) {
|
||||||
this._buttonDown = false;
|
this._buttonDown = false;
|
||||||
if (this._dragInProgress) {
|
if (this._dragInProgress) {
|
||||||
return this._dragActorDropped(event);
|
return this._dragActorDropped(event);
|
||||||
@ -172,7 +219,9 @@ const _Draggable = new Lang.Class({
|
|||||||
}
|
}
|
||||||
// We intercept MOTION event to figure out if the drag has started and to draw
|
// We intercept MOTION event to figure out if the drag has started and to draw
|
||||||
// this._dragActor under the pointer when dragging is in progress
|
// this._dragActor under the pointer when dragging is in progress
|
||||||
} else if (event.type() == Clutter.EventType.MOTION) {
|
} else if (event.type() == Clutter.EventType.MOTION ||
|
||||||
|
(event.type() == Clutter.EventType.TOUCH_UPDATE &&
|
||||||
|
global.display.is_pointer_emulating_sequence(event.get_event_sequence()))) {
|
||||||
if (this._dragInProgress) {
|
if (this._dragInProgress) {
|
||||||
return this._updateDragPosition(event);
|
return this._updateDragPosition(event);
|
||||||
} else if (this._dragActor == null) {
|
} else if (this._dragActor == null) {
|
||||||
@ -214,7 +263,7 @@ const _Draggable = new Lang.Class({
|
|||||||
* This function is useful to call if you've specified manualMode
|
* This function is useful to call if you've specified manualMode
|
||||||
* for the draggable.
|
* for the draggable.
|
||||||
*/
|
*/
|
||||||
startDrag: function (stageX, stageY, time) {
|
startDrag: function (stageX, stageY, time, sequence) {
|
||||||
currentDraggable = this;
|
currentDraggable = this;
|
||||||
this._dragInProgress = true;
|
this._dragInProgress = true;
|
||||||
|
|
||||||
@ -228,6 +277,8 @@ const _Draggable = new Lang.Class({
|
|||||||
this.emit('drag-begin', time);
|
this.emit('drag-begin', time);
|
||||||
if (this._onEventId)
|
if (this._onEventId)
|
||||||
this._ungrabActor();
|
this._ungrabActor();
|
||||||
|
|
||||||
|
this._touchSequence = sequence;
|
||||||
this._grabEvents();
|
this._grabEvents();
|
||||||
global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
|
global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
|
||||||
|
|
||||||
@ -338,8 +389,8 @@ const _Draggable = new Lang.Class({
|
|||||||
let threshold = Gtk.Settings.get_default().gtk_dnd_drag_threshold;
|
let threshold = Gtk.Settings.get_default().gtk_dnd_drag_threshold;
|
||||||
if ((Math.abs(stageX - this._dragStartX) > threshold ||
|
if ((Math.abs(stageX - this._dragStartX) > threshold ||
|
||||||
Math.abs(stageY - this._dragStartY) > threshold)) {
|
Math.abs(stageY - this._dragStartY) > threshold)) {
|
||||||
this.startDrag(stageX, stageY, event.get_time());
|
this.startDrag(stageX, stageY, event.get_time(), this._touchSequence);
|
||||||
this._updateDragPosition(event);
|
this._updateDragPosition(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -334,7 +334,7 @@ function _sessionUpdated() {
|
|||||||
// from allowExtensions in the future
|
// from allowExtensions in the future
|
||||||
if (Main.sessionMode.allowExtensions) {
|
if (Main.sessionMode.allowExtensions) {
|
||||||
if (initted)
|
if (initted)
|
||||||
onEnabledExtensionsChanged();
|
enabledExtensions = getEnabledExtensions();
|
||||||
enableAllExtensions();
|
enableAllExtensions();
|
||||||
} else {
|
} else {
|
||||||
disableAllExtensions();
|
disableAllExtensions();
|
||||||
|
@ -24,9 +24,6 @@ const KEYBOARD_TYPE = 'keyboard-type';
|
|||||||
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||||
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
||||||
|
|
||||||
const CURSOR_BUS_NAME = 'org.gnome.SettingsDaemon.Cursor';
|
|
||||||
const CURSOR_OBJECT_PATH = '/org/gnome/SettingsDaemon/Cursor';
|
|
||||||
|
|
||||||
const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon';
|
const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon';
|
||||||
const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon';
|
const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon';
|
||||||
|
|
||||||
@ -207,9 +204,6 @@ const Keyboard = new Lang.Class({
|
|||||||
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
|
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
|
||||||
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
||||||
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync));
|
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync));
|
||||||
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
|
|
||||||
Lang.bind(this, this._sync),
|
|
||||||
Lang.bind(this, this._sync));
|
|
||||||
this._daemonProxy = null;
|
this._daemonProxy = null;
|
||||||
this._lastDeviceId = null;
|
this._lastDeviceId = null;
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ const Atspi = imports.gi.Atspi;
|
|||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const GDesktopEnums = imports.gi.GDesktopEnums;
|
const GDesktopEnums = imports.gi.GDesktopEnums;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
@ -22,6 +23,8 @@ const MOUSE_POLL_FREQUENCY = 50;
|
|||||||
const CROSSHAIRS_CLIP_SIZE = [100, 100];
|
const CROSSHAIRS_CLIP_SIZE = [100, 100];
|
||||||
const NO_CHANGE = 0.0;
|
const NO_CHANGE = 0.0;
|
||||||
|
|
||||||
|
const POINTER_REST_TIME = 1000; // milliseconds
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||||
const SHOW_KEY = 'screen-magnifier-enabled';
|
const SHOW_KEY = 'screen-magnifier-enabled';
|
||||||
@ -709,6 +712,9 @@ const ZoomRegion = new Lang.Class({
|
|||||||
this._xCaret = 0;
|
this._xCaret = 0;
|
||||||
this._yCaret = 0;
|
this._yCaret = 0;
|
||||||
|
|
||||||
|
this._pointerIdleMonitor = Meta.IdleMonitor.get_for_device(Meta.VIRTUAL_CORE_POINTER_ID);
|
||||||
|
this._scrollContentsTimerId = 0;
|
||||||
|
|
||||||
Main.layoutManager.connect('monitors-changed',
|
Main.layoutManager.connect('monitors-changed',
|
||||||
Lang.bind(this, this._monitorsChanged));
|
Lang.bind(this, this._monitorsChanged));
|
||||||
this._focusCaretTracker.connect('caret-moved',
|
this._focusCaretTracker.connect('caret-moved',
|
||||||
@ -1068,6 +1074,26 @@ const ZoomRegion = new Lang.Class({
|
|||||||
return this._isMouseOverRegion();
|
return this._isMouseOverRegion();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_clearScrollContentsTimer: function() {
|
||||||
|
if (this._scrollContentsTimerId != 0) {
|
||||||
|
Mainloop.source_remove(this._scrollContentsTimerId);
|
||||||
|
this._scrollContentsTimerId = 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_scrollContentsToDelayed: function(x, y) {
|
||||||
|
if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) {
|
||||||
|
this.scrollContentsTo(x, y);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._clearScrollContentsTimer();
|
||||||
|
this._scrollContentsTimerId = Mainloop.timeout_add(POINTER_REST_TIME, Lang.bind(this, function() {
|
||||||
|
this._scrollContentsToDelayed(x, y);
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scrollContentsTo:
|
* scrollContentsTo:
|
||||||
* Shift the contents of the magnified view such it is centered on the given
|
* Shift the contents of the magnified view such it is centered on the given
|
||||||
@ -1076,6 +1102,8 @@ const ZoomRegion = new Lang.Class({
|
|||||||
* @y: The y-coord of the point to center on.
|
* @y: The y-coord of the point to center on.
|
||||||
*/
|
*/
|
||||||
scrollContentsTo: function(x, y) {
|
scrollContentsTo: function(x, y) {
|
||||||
|
this._clearScrollContentsTimer();
|
||||||
|
|
||||||
this._followingCursor = false;
|
this._followingCursor = false;
|
||||||
this._changeROI({ xCenter: x,
|
this._changeROI({ xCenter: x,
|
||||||
yCenter: y });
|
yCenter: y });
|
||||||
@ -1381,7 +1409,7 @@ const ZoomRegion = new Lang.Class({
|
|||||||
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED)
|
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED)
|
||||||
[xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret);
|
[xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret);
|
||||||
|
|
||||||
this.scrollContentsTo(xCaret, yCaret);
|
this._scrollContentsToDelayed(xCaret, yCaret);
|
||||||
},
|
},
|
||||||
|
|
||||||
_centerFromFocusPosition: function() {
|
_centerFromFocusPosition: function() {
|
||||||
@ -1395,7 +1423,7 @@ const ZoomRegion = new Lang.Class({
|
|||||||
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED)
|
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED)
|
||||||
[xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus);
|
[xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus);
|
||||||
|
|
||||||
this.scrollContentsTo(xFocus, yFocus);
|
this._scrollContentsToDelayed(xFocus, yFocus);
|
||||||
},
|
},
|
||||||
|
|
||||||
_centerFromPointPush: function(xPoint, yPoint) {
|
_centerFromPointPush: function(xPoint, yPoint) {
|
||||||
|
@ -78,6 +78,7 @@ let _startDate;
|
|||||||
let _defaultCssStylesheet = null;
|
let _defaultCssStylesheet = null;
|
||||||
let _cssStylesheet = null;
|
let _cssStylesheet = null;
|
||||||
let _a11ySettings = null;
|
let _a11ySettings = null;
|
||||||
|
let _themeResource = null;
|
||||||
|
|
||||||
function _sessionUpdated() {
|
function _sessionUpdated() {
|
||||||
if (sessionMode.isPrimary)
|
if (sessionMode.isPrimary)
|
||||||
@ -137,9 +138,7 @@ function _initializeUI() {
|
|||||||
Shell.WindowTracker.get_default();
|
Shell.WindowTracker.get_default();
|
||||||
Shell.AppUsage.get_default();
|
Shell.AppUsage.get_default();
|
||||||
|
|
||||||
let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
|
reloadThemeResource();
|
||||||
resource._register();
|
|
||||||
|
|
||||||
_loadDefaultStylesheet();
|
_loadDefaultStylesheet();
|
||||||
|
|
||||||
// Setup the stage hierarchy early
|
// Setup the stage hierarchy early
|
||||||
@ -290,6 +289,14 @@ function setThemeStylesheet(cssStylesheet) {
|
|||||||
_cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null;
|
_cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reloadThemeResource() {
|
||||||
|
if (_themeResource)
|
||||||
|
_themeResource._unregister();
|
||||||
|
|
||||||
|
_themeResource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
|
||||||
|
_themeResource._register();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* loadTheme:
|
* loadTheme:
|
||||||
*
|
*
|
||||||
|
@ -14,7 +14,6 @@ const Atk = imports.gi.Atk;
|
|||||||
|
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
const Animation = imports.ui.animation;
|
|
||||||
const Layout = imports.ui.layout;
|
const Layout = imports.ui.layout;
|
||||||
const Lightbox = imports.ui.lightbox;
|
const Lightbox = imports.ui.lightbox;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@ -23,10 +22,6 @@ const Tweener = imports.ui.tweener;
|
|||||||
const OPEN_AND_CLOSE_TIME = 0.1;
|
const OPEN_AND_CLOSE_TIME = 0.1;
|
||||||
const FADE_OUT_DIALOG_TIME = 1.0;
|
const FADE_OUT_DIALOG_TIME = 1.0;
|
||||||
|
|
||||||
const WORK_SPINNER_ICON_SIZE = 24;
|
|
||||||
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
|
||||||
const WORK_SPINNER_ANIMATION_TIME = 0.3;
|
|
||||||
|
|
||||||
const State = {
|
const State = {
|
||||||
OPENED: 0,
|
OPENED: 0,
|
||||||
CLOSED: 1,
|
CLOSED: 1,
|
||||||
@ -79,7 +74,9 @@ const ModalDialog = new Lang.Class({
|
|||||||
this._group.add_actor(this._backgroundBin);
|
this._group.add_actor(this._backgroundBin);
|
||||||
|
|
||||||
this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
|
this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
|
||||||
vertical: true });
|
x_align: Clutter.ActorAlign.CENTER,
|
||||||
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
|
vertical: true });
|
||||||
// modal dialogs are fixed width and grow vertically; set the request
|
// modal dialogs are fixed width and grow vertically; set the request
|
||||||
// mode accordingly so wrapped labels are handled correctly during
|
// mode accordingly so wrapped labels are handled correctly during
|
||||||
// size requests.
|
// size requests.
|
||||||
@ -100,7 +97,8 @@ const ModalDialog = new Lang.Class({
|
|||||||
this.backgroundStack.add_actor(this.dialogLayout);
|
this.backgroundStack.add_actor(this.dialogLayout);
|
||||||
|
|
||||||
|
|
||||||
this.contentLayout = new St.BoxLayout({ vertical: true });
|
this.contentLayout = new St.BoxLayout({ vertical: true,
|
||||||
|
style_class: "modal-dialog-content-box" });
|
||||||
this.dialogLayout.add(this.contentLayout,
|
this.dialogLayout.add(this.contentLayout,
|
||||||
{ expand: true,
|
{ expand: true,
|
||||||
x_fill: true,
|
x_fill: true,
|
||||||
@ -108,8 +106,7 @@ const ModalDialog = new Lang.Class({
|
|||||||
x_align: St.Align.MIDDLE,
|
x_align: St.Align.MIDDLE,
|
||||||
y_align: St.Align.START });
|
y_align: St.Align.START });
|
||||||
|
|
||||||
this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
|
this.buttonLayout = new St.Widget ({ layout_manager: new Clutter.BoxLayout ({ homogeneous:true }) });
|
||||||
vertical: false });
|
|
||||||
this.dialogLayout.add(this.buttonLayout,
|
this.dialogLayout.add(this.buttonLayout,
|
||||||
{ x_align: St.Align.MIDDLE,
|
{ x_align: St.Align.MIDDLE,
|
||||||
y_align: St.Align.END });
|
y_align: St.Align.END });
|
||||||
@ -118,8 +115,6 @@ const ModalDialog = new Lang.Class({
|
|||||||
this._initialKeyFocus = this.dialogLayout;
|
this._initialKeyFocus = this.dialogLayout;
|
||||||
this._initialKeyFocusDestroyId = 0;
|
this._initialKeyFocusDestroyId = 0;
|
||||||
this._savedKeyFocus = null;
|
this._savedKeyFocus = null;
|
||||||
|
|
||||||
this._workSpinner = null;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
@ -147,16 +142,12 @@ const ModalDialog = new Lang.Class({
|
|||||||
else
|
else
|
||||||
x_alignment = St.Align.MIDDLE;
|
x_alignment = St.Align.MIDDLE;
|
||||||
|
|
||||||
this.addButton(buttonInfo, { expand: true,
|
this.addButton(buttonInfo);
|
||||||
x_fill: false,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: x_alignment,
|
|
||||||
y_align: St.Align.MIDDLE });
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
addButton: function(buttonInfo, layoutInfo) {
|
addButton: function(buttonInfo) {
|
||||||
let label = buttonInfo['label'];
|
let label = buttonInfo['label']
|
||||||
let action = buttonInfo['action'];
|
let action = buttonInfo['action'];
|
||||||
let key = buttonInfo['key'];
|
let key = buttonInfo['key'];
|
||||||
let isDefault = buttonInfo['default'];
|
let isDefault = buttonInfo['default'];
|
||||||
@ -170,10 +161,12 @@ const ModalDialog = new Lang.Class({
|
|||||||
else
|
else
|
||||||
keys = [];
|
keys = [];
|
||||||
|
|
||||||
let button = new St.Button({ style_class: 'modal-dialog-button button',
|
let button = new St.Button({ style_class: 'modal-dialog-linked-button',
|
||||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
||||||
reactive: true,
|
reactive: true,
|
||||||
can_focus: true,
|
can_focus: true,
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
label: label });
|
label: label });
|
||||||
button.connect('clicked', action);
|
button.connect('clicked', action);
|
||||||
|
|
||||||
@ -188,47 +181,11 @@ const ModalDialog = new Lang.Class({
|
|||||||
for (let i in keys)
|
for (let i in keys)
|
||||||
this._buttonKeys[keys[i]] = buttonInfo;
|
this._buttonKeys[keys[i]] = buttonInfo;
|
||||||
|
|
||||||
this.buttonLayout.add(button, layoutInfo);
|
this.buttonLayout.add_actor(button);
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
},
|
},
|
||||||
|
|
||||||
placeSpinner: function(layoutInfo) {
|
|
||||||
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
|
|
||||||
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
|
|
||||||
this._workSpinner.actor.opacity = 0;
|
|
||||||
this._workSpinner.actor.show();
|
|
||||||
|
|
||||||
this.buttonLayout.add(this._workSpinner.actor, layoutInfo);
|
|
||||||
},
|
|
||||||
|
|
||||||
setWorking: function(working) {
|
|
||||||
if (!this._workSpinner)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Tweener.removeTweens(this._workSpinner.actor);
|
|
||||||
if (working) {
|
|
||||||
this._workSpinner.play();
|
|
||||||
Tweener.addTween(this._workSpinner.actor,
|
|
||||||
{ opacity: 255,
|
|
||||||
delay: WORK_SPINNER_ANIMATION_DELAY,
|
|
||||||
time: WORK_SPINNER_ANIMATION_TIME,
|
|
||||||
transition: 'linear'
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Tweener.addTween(this._workSpinner.actor,
|
|
||||||
{ opacity: 0,
|
|
||||||
time: WORK_SPINNER_ANIMATION_TIME,
|
|
||||||
transition: 'linear',
|
|
||||||
onCompleteScope: this,
|
|
||||||
onComplete: function() {
|
|
||||||
if (this._workSpinner)
|
|
||||||
this._workSpinner.stop();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onKeyPressEvent: function(object, event) {
|
_onKeyPressEvent: function(object, event) {
|
||||||
this._pressedKey = event.get_key_symbol();
|
this._pressedKey = event.get_key_symbol();
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
@ -107,13 +107,6 @@ const Overview = new Lang.Class({
|
|||||||
|
|
||||||
this._overviewCreated = true;
|
this._overviewCreated = true;
|
||||||
|
|
||||||
// The main Background actors are inside global.window_group which are
|
|
||||||
// hidden when displaying the overview, so we create a new
|
|
||||||
// one. Instances of this class share a single CoglTexture behind the
|
|
||||||
// scenes which allows us to show the background with different
|
|
||||||
// rendering options without duplicating the texture data.
|
|
||||||
let monitor = Main.layoutManager.primaryMonitor;
|
|
||||||
|
|
||||||
let layout = new Clutter.BinLayout();
|
let layout = new Clutter.BinLayout();
|
||||||
this._stack = new Clutter.Actor({ layout_manager: layout });
|
this._stack = new Clutter.Actor({ layout_manager: layout });
|
||||||
this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true }));
|
this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true }));
|
||||||
@ -128,6 +121,11 @@ const Overview = new Lang.Class({
|
|||||||
y_expand: true });
|
y_expand: true });
|
||||||
this._overview._delegate = this;
|
this._overview._delegate = this;
|
||||||
|
|
||||||
|
// The main Background actors are inside global.window_group which are
|
||||||
|
// hidden when displaying the overview, so we create a new
|
||||||
|
// one. Instances of this class share a single CoglTexture behind the
|
||||||
|
// scenes which allows us to show the background with different
|
||||||
|
// rendering options without duplicating the texture data.
|
||||||
this._backgroundGroup = new Meta.BackgroundGroup();
|
this._backgroundGroup = new Meta.BackgroundGroup();
|
||||||
Main.layoutManager.overviewGroup.add_child(this._backgroundGroup);
|
Main.layoutManager.overviewGroup.add_child(this._backgroundGroup);
|
||||||
this._bgManagers = [];
|
this._bgManagers = [];
|
||||||
|
@ -25,12 +25,12 @@ const RemoteMenu = imports.ui.remoteMenu;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
const PANEL_ICON_SIZE = 24;
|
const PANEL_ICON_SIZE = 16;
|
||||||
const APP_MENU_ICON_MARGIN = 2;
|
const APP_MENU_ICON_MARGIN = 0;
|
||||||
|
|
||||||
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
||||||
|
|
||||||
const SPINNER_ANIMATION_TIME = 0.2;
|
const SPINNER_ANIMATION_TIME = 1.0;
|
||||||
|
|
||||||
// To make sure the panel corners blend nicely with the panel,
|
// To make sure the panel corners blend nicely with the panel,
|
||||||
// we draw background and borders the same way, e.g. drawing
|
// we draw background and borders the same way, e.g. drawing
|
||||||
@ -95,6 +95,7 @@ const AppMenuButton = new Lang.Class({
|
|||||||
this._startingApps = [];
|
this._startingApps = [];
|
||||||
|
|
||||||
this._menuManager = panel.menuManager;
|
this._menuManager = panel.menuManager;
|
||||||
|
this._gtkSettings = Gtk.Settings.get_default();
|
||||||
this._targetApp = null;
|
this._targetApp = null;
|
||||||
this._appMenuNotifyId = 0;
|
this._appMenuNotifyId = 0;
|
||||||
this._actionGroupNotifyId = 0;
|
this._actionGroupNotifyId = 0;
|
||||||
@ -123,11 +124,14 @@ const AppMenuButton = new Lang.Class({
|
|||||||
this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
|
this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
|
||||||
this._container.add_actor(this._arrow);
|
this._container.add_actor(this._arrow);
|
||||||
|
|
||||||
this._visible = !Main.overview.visible;
|
this._visible = this._gtkSettings.gtk_shell_shows_app_menu &&
|
||||||
|
!Main.overview.visible;
|
||||||
if (!this._visible)
|
if (!this._visible)
|
||||||
this.actor.hide();
|
this.actor.hide();
|
||||||
this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync));
|
this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync));
|
||||||
this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync));
|
this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync));
|
||||||
|
this._showsAppMenuId = this._gtkSettings.connect('notify::gtk-shell-shows-app-menu',
|
||||||
|
Lang.bind(this, this._sync));
|
||||||
|
|
||||||
this._stop = true;
|
this._stop = true;
|
||||||
|
|
||||||
@ -305,7 +309,9 @@ const AppMenuButton = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let visible = (this._targetApp != null && !Main.overview.visibleTarget);
|
let visible = (this._targetApp != null &&
|
||||||
|
this._gtkSettings.gtk_shell_shows_app_menu &&
|
||||||
|
!Main.overview.visibleTarget);
|
||||||
if (visible)
|
if (visible)
|
||||||
this.show();
|
this.show();
|
||||||
else
|
else
|
||||||
@ -378,6 +384,10 @@ const AppMenuButton = new Lang.Class({
|
|||||||
Main.overview.disconnect(this._overviewShowingId);
|
Main.overview.disconnect(this._overviewShowingId);
|
||||||
this._overviewShowingId = 0;
|
this._overviewShowingId = 0;
|
||||||
}
|
}
|
||||||
|
if (this._showsAppMenuId > 0) {
|
||||||
|
this._gtkSettings.disconnect(this._showsAppMenuId);
|
||||||
|
this._showsAppMenuId = 0;
|
||||||
|
}
|
||||||
if (this._switchWorkspaceNotifyId > 0) {
|
if (this._switchWorkspaceNotifyId > 0) {
|
||||||
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
||||||
this._switchWorkspaceNotifyId = 0;
|
this._switchWorkspaceNotifyId = 0;
|
||||||
@ -449,7 +459,8 @@ const ActivitiesButton = new Lang.Class({
|
|||||||
|
|
||||||
if (event.type() == Clutter.EventType.TOUCH_END ||
|
if (event.type() == Clutter.EventType.TOUCH_END ||
|
||||||
event.type() == Clutter.EventType.BUTTON_RELEASE)
|
event.type() == Clutter.EventType.BUTTON_RELEASE)
|
||||||
Main.overview.toggle();
|
if (Main.overview.shouldToggleByCornerOrButton())
|
||||||
|
Main.overview.toggle();
|
||||||
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
},
|
},
|
||||||
@ -457,7 +468,8 @@ const ActivitiesButton = new Lang.Class({
|
|||||||
_onKeyRelease: function(actor, event) {
|
_onKeyRelease: function(actor, event) {
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
|
if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
|
||||||
Main.overview.toggle();
|
if (Main.overview.shouldToggleByCornerOrButton())
|
||||||
|
Main.overview.toggle();
|
||||||
}
|
}
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
},
|
},
|
||||||
@ -642,14 +654,50 @@ const PanelCorner = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const AggregateLayout = new Lang.Class({
|
||||||
|
Name: 'AggregateLayout',
|
||||||
|
Extends: Clutter.BoxLayout,
|
||||||
|
|
||||||
|
_init: function(params) {
|
||||||
|
if (!params)
|
||||||
|
params = {};
|
||||||
|
params['orientation'] = Clutter.Orientation.VERTICAL;
|
||||||
|
this.parent(params);
|
||||||
|
|
||||||
|
this._sizeChildren = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
addSizeChild: function(actor) {
|
||||||
|
this._sizeChildren.push(actor);
|
||||||
|
this.layout_changed();
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_width: function(container, forHeight) {
|
||||||
|
let themeNode = container.get_theme_node();
|
||||||
|
let minWidth = themeNode.get_min_width();
|
||||||
|
let natWidth = minWidth;
|
||||||
|
|
||||||
|
for (let i = 0; i < this._sizeChildren.length; i++) {
|
||||||
|
let child = this._sizeChildren[i];
|
||||||
|
let [childMin, childNat] = child.get_preferred_width(forHeight);
|
||||||
|
minWidth = Math.max(minWidth, childMin);
|
||||||
|
natWidth = Math.max(minWidth, childNat);
|
||||||
|
}
|
||||||
|
return [minWidth, natWidth];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const AggregateMenu = new Lang.Class({
|
const AggregateMenu = new Lang.Class({
|
||||||
Name: 'AggregateMenu',
|
Name: 'AggregateMenu',
|
||||||
Extends: PanelMenu.Button,
|
Extends: PanelMenu.Button,
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this.parent(0.0, _("Settings"), false);
|
this.parent(0.0, C_("System menu in the top bar", "System"), false);
|
||||||
this.menu.actor.add_style_class_name('aggregate-menu');
|
this.menu.actor.add_style_class_name('aggregate-menu');
|
||||||
|
|
||||||
|
let menuLayout = new AggregateLayout();
|
||||||
|
this.menu.box.set_layout_manager(menuLayout);
|
||||||
|
|
||||||
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
|
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
|
||||||
this.actor.add_child(this._indicators);
|
this.actor.add_child(this._indicators);
|
||||||
|
|
||||||
@ -697,8 +745,12 @@ const AggregateMenu = new Lang.Class({
|
|||||||
this.menu.addMenuItem(this._location.menu);
|
this.menu.addMenuItem(this._location.menu);
|
||||||
this.menu.addMenuItem(this._rfkill.menu);
|
this.menu.addMenuItem(this._rfkill.menu);
|
||||||
this.menu.addMenuItem(this._power.menu);
|
this.menu.addMenuItem(this._power.menu);
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
|
||||||
this.menu.addMenuItem(this._system.menu);
|
this.menu.addMenuItem(this._system.menu);
|
||||||
|
|
||||||
|
menuLayout.addSizeChild(this._location.menu.actor);
|
||||||
|
menuLayout.addSizeChild(this._rfkill.menu.actor);
|
||||||
|
menuLayout.addSizeChild(this._power.menu.actor);
|
||||||
|
menuLayout.addSizeChild(this._system.menu.actor);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@ const PopupImageMenuItem = new Lang.Class({
|
|||||||
this.actor.add_child(this.label);
|
this.actor.add_child(this.label);
|
||||||
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
||||||
this.actor.add_child(this._icon, { align: St.Align.END });
|
this.actor.add_child(this._icon, { align: St.Align.END });
|
||||||
|
this.actor.label_actor = this.label;
|
||||||
|
|
||||||
this.setIcon(iconName);
|
this.setIcon(iconName);
|
||||||
},
|
},
|
||||||
@ -1059,11 +1060,6 @@ const PopupSubMenuMenuItem = new Lang.Class({
|
|||||||
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
|
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
|
||||||
this.actor.add(expander, { expand: true });
|
this.actor.add(expander, { expand: true });
|
||||||
|
|
||||||
this.status = new St.Label({ style_class: 'popup-status-menu-item',
|
|
||||||
y_expand: true,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER });
|
|
||||||
this.actor.add_child(this.status);
|
|
||||||
|
|
||||||
this._triangle = arrowIcon(St.Side.RIGHT);
|
this._triangle = arrowIcon(St.Side.RIGHT);
|
||||||
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
|
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
|
||||||
|
|
||||||
@ -1150,6 +1146,16 @@ const PopupSubMenuMenuItem = new Lang.Class({
|
|||||||
this.actor.remove_style_pseudo_class ('active');
|
this.actor.remove_style_pseudo_class ('active');
|
||||||
this._setOpenState(!this._getOpenState());
|
this._setOpenState(!this._getOpenState());
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onTouchEvent: function(actor, event) {
|
||||||
|
if (event.type() == Clutter.EventType.TOUCH_END) {
|
||||||
|
// Since we override the parent, we need to manage what the parent does
|
||||||
|
// with the active style class
|
||||||
|
this.actor.remove_style_pseudo_class ('active');
|
||||||
|
this._setOpenState(!this._getOpenState());
|
||||||
|
}
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ const RunDialog = new Lang.Class({
|
|||||||
|
|
||||||
// rt is short for "reload theme"
|
// rt is short for "reload theme"
|
||||||
'rt': Lang.bind(this, function() {
|
'rt': Lang.bind(this, function() {
|
||||||
|
Main.reloadThemeResource();
|
||||||
Main.loadTheme();
|
Main.loadTheme();
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GnomeBluetooth = imports.gi.GnomeBluetooth;
|
const GnomeBluetooth = imports.gi.GnomeBluetooth;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
@ -23,6 +20,8 @@ const RfkillManagerInterface = '<node> \
|
|||||||
|
|
||||||
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
|
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
|
||||||
|
|
||||||
|
const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup';
|
||||||
|
|
||||||
const Indicator = new Lang.Class({
|
const Indicator = new Lang.Class({
|
||||||
Name: 'BTIndicator',
|
Name: 'BTIndicator',
|
||||||
Extends: PanelMenu.SystemIndicator,
|
Extends: PanelMenu.SystemIndicator,
|
||||||
@ -32,6 +31,7 @@ const Indicator = new Lang.Class({
|
|||||||
|
|
||||||
this._indicator = this._addIndicator();
|
this._indicator = this._addIndicator();
|
||||||
this._indicator.icon_name = 'bluetooth-active-symbolic';
|
this._indicator.icon_name = 'bluetooth-active-symbolic';
|
||||||
|
this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP);
|
||||||
|
|
||||||
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
|
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
|
||||||
Lang.bind(this, function(proxy, error) {
|
Lang.bind(this, function(proxy, error) {
|
||||||
@ -44,13 +44,15 @@ const Indicator = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
|
this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
|
||||||
|
|
||||||
// The Bluetooth menu only appears when Bluetooth is in use,
|
|
||||||
// so just statically build it with a "Turn Off" menu item.
|
|
||||||
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
|
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
|
||||||
this._item.icon.icon_name = 'bluetooth-active-symbolic';
|
this._item.icon.icon_name = 'bluetooth-active-symbolic';
|
||||||
this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
|
|
||||||
this._proxy.BluetoothAirplaneMode = true;
|
this._toggleItem = new PopupMenu.PopupMenuItem('');
|
||||||
|
this._toggleItem.connect('activate', Lang.bind(this, function() {
|
||||||
|
this._proxy.BluetoothAirplaneMode = !this._proxy.BluetoothAirplaneMode;
|
||||||
}));
|
}));
|
||||||
|
this._item.menu.addMenuItem(this._toggleItem);
|
||||||
|
|
||||||
this._item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop');
|
this._item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop');
|
||||||
this.menu.addMenuItem(this._item);
|
this.menu.addMenuItem(this._item);
|
||||||
|
|
||||||
@ -68,41 +70,75 @@ const Indicator = new Lang.Class({
|
|||||||
while (ret) {
|
while (ret) {
|
||||||
let isDefault = this._model.get_value(iter,
|
let isDefault = this._model.get_value(iter,
|
||||||
GnomeBluetooth.Column.DEFAULT);
|
GnomeBluetooth.Column.DEFAULT);
|
||||||
if (isDefault)
|
let isPowered = this._model.get_value(iter,
|
||||||
|
GnomeBluetooth.Column.POWERED);
|
||||||
|
if (isDefault && isPowered)
|
||||||
return iter;
|
return iter;
|
||||||
ret = this._model.iter_next(iter);
|
ret = this._model.iter_next(iter);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_getNConnectedDevices: function() {
|
// nDevices is the number of devices setup for the current default
|
||||||
|
// adapter if one exists and is powered. If unpowered or unavailable,
|
||||||
|
// nDevice is "1" if it had setup devices associated to it the last
|
||||||
|
// time it was seen, and "-1" if not.
|
||||||
|
//
|
||||||
|
// nConnectedDevices is the number of devices connected to the default
|
||||||
|
// adapter if one exists and is powered, or -1 if it's not available.
|
||||||
|
_getNDevices: function() {
|
||||||
let adapter = this._getDefaultAdapter();
|
let adapter = this._getDefaultAdapter();
|
||||||
if (!adapter)
|
if (!adapter)
|
||||||
return 0;
|
return [ this._hadSetupDevices ? 1 : -1, -1 ];
|
||||||
|
|
||||||
|
let nConnectedDevices = 0;
|
||||||
let nDevices = 0;
|
let nDevices = 0;
|
||||||
let [ret, iter] = this._model.iter_children(adapter);
|
let [ret, iter] = this._model.iter_children(adapter);
|
||||||
while (ret) {
|
while (ret) {
|
||||||
let isConnected = this._model.get_value(iter,
|
let isConnected = this._model.get_value(iter,
|
||||||
GnomeBluetooth.Column.CONNECTED);
|
GnomeBluetooth.Column.CONNECTED);
|
||||||
if (isConnected)
|
if (isConnected)
|
||||||
|
nConnectedDevices++;
|
||||||
|
|
||||||
|
let isPaired = this._model.get_value(iter,
|
||||||
|
GnomeBluetooth.Column.PAIRED);
|
||||||
|
let isTrusted = this._model.get_value(iter,
|
||||||
|
GnomeBluetooth.Column.TRUSTED);
|
||||||
|
if (isPaired || isTrusted)
|
||||||
nDevices++;
|
nDevices++;
|
||||||
ret = this._model.iter_next(iter);
|
ret = this._model.iter_next(iter);
|
||||||
}
|
}
|
||||||
return nDevices;
|
|
||||||
|
if (this._hadSetupDevices != (nDevices > 0)) {
|
||||||
|
this._hadSetupDevices = !this._hadSetupDevices;
|
||||||
|
global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [ nDevices, nConnectedDevices];
|
||||||
},
|
},
|
||||||
|
|
||||||
_sync: function() {
|
_sync: function() {
|
||||||
let nDevices = this._getNConnectedDevices();
|
let [ nDevices, nConnectedDevices ] = this._getNDevices();
|
||||||
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
||||||
|
|
||||||
this.menu.setSensitive(sensitive);
|
this.menu.setSensitive(sensitive);
|
||||||
this._indicator.visible = nDevices > 0;
|
this._indicator.visible = nConnectedDevices > 0;
|
||||||
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
|
|
||||||
|
|
||||||
|
// Remember if there were setup devices and show the menu
|
||||||
|
// if we've seen setup devices and we're not hard blocked
|
||||||
if (nDevices > 0)
|
if (nDevices > 0)
|
||||||
this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices);
|
this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode;
|
||||||
else
|
else
|
||||||
this._item.status.text = _("Not Connected");
|
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
|
||||||
|
|
||||||
|
if (nConnectedDevices > 0)
|
||||||
|
/* Translators: this is the number of connected bluetooth devices */
|
||||||
|
this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
|
||||||
|
else if (nConnectedDevices == -1)
|
||||||
|
this._item.label.text = _("Off");
|
||||||
|
else
|
||||||
|
this._item.label.text = _("Not In Use");
|
||||||
|
|
||||||
|
this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -62,13 +62,13 @@ const Indicator = new Lang.Class({
|
|||||||
this._indicator = this._addIndicator();
|
this._indicator = this._addIndicator();
|
||||||
this._indicator.icon_name = 'find-location-symbolic';
|
this._indicator.icon_name = 'find-location-symbolic';
|
||||||
|
|
||||||
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Location"), true);
|
this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
|
||||||
this._item.icon.icon_name = 'find-location-symbolic';
|
this._item.icon.icon_name = 'find-location-symbolic';
|
||||||
|
|
||||||
this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this);
|
this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this);
|
||||||
this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent');
|
this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent');
|
||||||
|
|
||||||
this._item.status.text = _("Enabled");
|
this._item.label.text = _("Location Enabled");
|
||||||
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction));
|
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction));
|
||||||
this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop');
|
this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop');
|
||||||
|
|
||||||
@ -173,10 +173,11 @@ const Indicator = new Lang.Class({
|
|||||||
|
|
||||||
_updateMenuLabels: function() {
|
_updateMenuLabels: function() {
|
||||||
if (this._settings.get_boolean(ENABLED)) {
|
if (this._settings.get_boolean(ENABLED)) {
|
||||||
this._item.status.text = this._indicator.visible ? _("In Use") : _("Enabled");
|
this._item.label.text = this._indicator.visible ? _("Location In Use")
|
||||||
|
: _("Location Enabled");
|
||||||
this._onOffAction.label.text = _("Disable");
|
this._onOffAction.label.text = _("Disable");
|
||||||
} else {
|
} else {
|
||||||
this._item.status.text = _("Disabled");
|
this._item.label.text = _("Location Disabled");
|
||||||
this._onOffAction.label.text = _("Enable");
|
this._onOffAction.label.text = _("Enable");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -257,16 +257,8 @@ const NMConnectionSection = new Lang.Class({
|
|||||||
this._radioSection.actor.visible = (nItems > 1);
|
this._radioSection.actor.visible = (nItems > 1);
|
||||||
this._labelSection.actor.visible = (nItems == 1);
|
this._labelSection.actor.visible = (nItems == 1);
|
||||||
|
|
||||||
this.item.status.text = this._getStatus();
|
this.item.label.text = this._getStatus();
|
||||||
this.item.icon.icon_name = this._getMenuIcon();
|
this.item.icon.icon_name = this._getMenuIcon();
|
||||||
|
|
||||||
// desc can be undefined at cold-plug, before we called
|
|
||||||
// NMGtk.disambiguate_device_names() at least once
|
|
||||||
let desc = this._getDescription();
|
|
||||||
if (desc)
|
|
||||||
this.item.label.text = desc;
|
|
||||||
else
|
|
||||||
this.item.label.text = '';
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_getMenuIcon: function() {
|
_getMenuIcon: function() {
|
||||||
@ -355,6 +347,7 @@ const NMConnectionDevice = new Lang.Class({
|
|||||||
this.parent(client);
|
this.parent(client);
|
||||||
this._device = device;
|
this._device = device;
|
||||||
this._settings = settings;
|
this._settings = settings;
|
||||||
|
this._description = '';
|
||||||
|
|
||||||
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
|
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
|
||||||
this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection));
|
this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection));
|
||||||
@ -454,38 +447,44 @@ const NMConnectionDevice = new Lang.Class({
|
|||||||
|
|
||||||
switch(this._device.state) {
|
switch(this._device.state) {
|
||||||
case NetworkManager.DeviceState.DISCONNECTED:
|
case NetworkManager.DeviceState.DISCONNECTED:
|
||||||
return _("Off");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Off").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.ACTIVATED:
|
case NetworkManager.DeviceState.ACTIVATED:
|
||||||
return _("Connected");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Connected").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.UNMANAGED:
|
case NetworkManager.DeviceState.UNMANAGED:
|
||||||
/* 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);
|
||||||
return _("Unmanaged");
|
%s is a network identifier */
|
||||||
|
return _("%s Unmanaged").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.DEACTIVATING:
|
case NetworkManager.DeviceState.DEACTIVATING:
|
||||||
return _("Disconnecting");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Disconnecting").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.PREPARE:
|
case NetworkManager.DeviceState.PREPARE:
|
||||||
case NetworkManager.DeviceState.CONFIG:
|
case NetworkManager.DeviceState.CONFIG:
|
||||||
case NetworkManager.DeviceState.IP_CONFIG:
|
case NetworkManager.DeviceState.IP_CONFIG:
|
||||||
case NetworkManager.DeviceState.IP_CHECK:
|
case NetworkManager.DeviceState.IP_CHECK:
|
||||||
case NetworkManager.DeviceState.SECONDARIES:
|
case NetworkManager.DeviceState.SECONDARIES:
|
||||||
return _("Connecting");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Connecting").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.NEED_AUTH:
|
case NetworkManager.DeviceState.NEED_AUTH:
|
||||||
/* 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; %s is a network identifier */
|
||||||
return _("Authentication required");
|
return _("%s Requires Authentication").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.UNAVAILABLE:
|
case NetworkManager.DeviceState.UNAVAILABLE:
|
||||||
// This state is actually a compound of various states (generically unavailable,
|
// This state is actually a compound of various states (generically unavailable,
|
||||||
// firmware missing), that are exposed by different properties (whose state may
|
// firmware missing), that are exposed by different properties (whose state may
|
||||||
// or may not updated when we receive state-changed).
|
// or may not updated when we receive state-changed).
|
||||||
if (this._device.firmware_missing) {
|
if (this._device.firmware_missing) {
|
||||||
/* 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; %s is a network identifier */
|
||||||
return _("Firmware missing");
|
return _("Firmware Missing For %s").format(this._getDescription());
|
||||||
}
|
}
|
||||||
/* 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; %s is a network identifier */
|
||||||
return _("Unavailable");
|
return _("%s Unavailable").format(this._getDescription());
|
||||||
case NetworkManager.DeviceState.FAILED:
|
case NetworkManager.DeviceState.FAILED:
|
||||||
return _("Connection failed");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Connection Failed").format(this._getDescription());
|
||||||
default:
|
default:
|
||||||
log('Device state invalid, is %d'.format(this._device.state));
|
log('Device state invalid, is %d'.format(this._device.state));
|
||||||
return 'invalid';
|
return 'invalid';
|
||||||
@ -585,11 +584,12 @@ const NMDeviceModem = new Lang.Class({
|
|||||||
|
|
||||||
_getStatus: function() {
|
_getStatus: function() {
|
||||||
if (!this._client.wwan_hardware_enabled)
|
if (!this._client.wwan_hardware_enabled)
|
||||||
return _("Hardware Disabled");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Hardware Disabled").format(this._getDescription());
|
||||||
else if (!this._client.wwan_enabled)
|
else if (!this._client.wwan_enabled)
|
||||||
/* Translators: this is for a network device that cannot be activated
|
/* Translators: this is for a network device that cannot be activated
|
||||||
because it's disabled by rfkill (airplane mode) */
|
because it's disabled by rfkill (airplane mode); %s is a network identifier */
|
||||||
return _("Disabled");
|
return _("%s Disabled").format(this._getDescription());
|
||||||
else if (this._device.state == NetworkManager.DeviceState.ACTIVATED &&
|
else if (this._device.state == NetworkManager.DeviceState.ACTIVATED &&
|
||||||
this._mobileDevice && this._mobileDevice.operator_name)
|
this._mobileDevice && this._mobileDevice.operator_name)
|
||||||
return this._mobileDevice.operator_name;
|
return this._mobileDevice.operator_name;
|
||||||
@ -877,7 +877,7 @@ const NMWirelessDialog = new Lang.Class({
|
|||||||
y_align: Clutter.ActorAlign.CENTER });
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
|
||||||
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
|
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
|
||||||
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
|
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 16, 16);
|
||||||
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
|
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
|
||||||
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
|
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
|
||||||
text: _("No Networks") }));
|
text: _("No Networks") }));
|
||||||
@ -917,10 +917,7 @@ const NMWirelessDialog = new Lang.Class({
|
|||||||
key: Clutter.Escape });
|
key: Clutter.Escape });
|
||||||
this._connectButton = this.addButton({ action: Lang.bind(this, this._connect),
|
this._connectButton = this.addButton({ action: Lang.bind(this, this._connect),
|
||||||
label: _("Connect"),
|
label: _("Connect"),
|
||||||
key: Clutter.Return },
|
key: Clutter.Return });
|
||||||
{ expand: true,
|
|
||||||
x_fill: false,
|
|
||||||
x_align: St.Align.END });
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_connect: function() {
|
_connect: function() {
|
||||||
@ -1282,9 +1279,8 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
|
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
|
||||||
this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
|
this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
|
||||||
|
|
||||||
this.item.status.text = this._getStatus();
|
|
||||||
this.item.icon.icon_name = this._getMenuIcon();
|
this.item.icon.icon_name = this._getMenuIcon();
|
||||||
this.item.label.text = this._description;
|
this.item.label.text = this._getStatus();
|
||||||
},
|
},
|
||||||
|
|
||||||
setDeviceDescription: function(desc) {
|
setDeviceDescription: function(desc) {
|
||||||
@ -1296,18 +1292,23 @@ const NMDeviceWireless = new Lang.Class({
|
|||||||
let ap = this._device.active_access_point;
|
let ap = this._device.active_access_point;
|
||||||
|
|
||||||
if (this._isHotSpotMaster())
|
if (this._isHotSpotMaster())
|
||||||
return _("Hotspot Active");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Hotspot Active").format(this._description);
|
||||||
else if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
|
else if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
|
||||||
this._device.state < NetworkManager.DeviceState.ACTIVATED)
|
this._device.state < NetworkManager.DeviceState.ACTIVATED)
|
||||||
return _("Connecting");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Connecting").format(this._description);
|
||||||
else if (ap)
|
else if (ap)
|
||||||
return ssidToLabel(ap.get_ssid());
|
return ssidToLabel(ap.get_ssid());
|
||||||
else if (!this._client.wireless_hardware_enabled)
|
else if (!this._client.wireless_hardware_enabled)
|
||||||
return _("Hardware Disabled");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Hardware Disabled").format(this._description);
|
||||||
else if (!this._client.wireless_enabled)
|
else if (!this._client.wireless_enabled)
|
||||||
return _("Off");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Off").format(this._description);
|
||||||
else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED)
|
else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED)
|
||||||
return _("Not Connected");
|
/* Translators: %s is a network identifier */
|
||||||
|
return _("%s Not Connected").format(this._description);
|
||||||
else
|
else
|
||||||
return '';
|
return '';
|
||||||
},
|
},
|
||||||
@ -1509,7 +1510,7 @@ const NMVPNSection = new Lang.Class({
|
|||||||
return item.getName();
|
return item.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _("Off");
|
return _("VPN Off");
|
||||||
},
|
},
|
||||||
|
|
||||||
_getMenuIcon: function() {
|
_getMenuIcon: function() {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const St = imports.gi.St;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const UPower = imports.gi.UPowerGlib;
|
const UPower = imports.gi.UPowerGlib;
|
||||||
|
|
||||||
@ -25,6 +27,8 @@ const DisplayDeviceInterface = '<node> \
|
|||||||
|
|
||||||
const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface);
|
const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface);
|
||||||
|
|
||||||
|
const SHOW_BATTERY_PERCENTAGE = 'show-battery-percentage';
|
||||||
|
|
||||||
const Indicator = new Lang.Class({
|
const Indicator = new Lang.Class({
|
||||||
Name: 'PowerIndicator',
|
Name: 'PowerIndicator',
|
||||||
Extends: PanelMenu.SystemIndicator,
|
Extends: PanelMenu.SystemIndicator,
|
||||||
@ -32,7 +36,15 @@ const Indicator = new Lang.Class({
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
this.parent();
|
this.parent();
|
||||||
|
|
||||||
|
this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
||||||
|
this._desktopSettings.connect('changed::' + SHOW_BATTERY_PERCENTAGE,
|
||||||
|
Lang.bind(this, this._sync));
|
||||||
|
|
||||||
this._indicator = this._addIndicator();
|
this._indicator = this._addIndicator();
|
||||||
|
this._percentageLabel = new St.Label({ y_expand: true,
|
||||||
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
this.indicators.add(this._percentageLabel, { expand: true, y_fill: true });
|
||||||
|
this.indicators.add_style_class_name('power-status');
|
||||||
|
|
||||||
this._proxy = new PowerManagerProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH,
|
this._proxy = new PowerManagerProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH,
|
||||||
Lang.bind(this, function(proxy, error) {
|
Lang.bind(this, function(proxy, error) {
|
||||||
@ -83,12 +95,12 @@ const Indicator = new Lang.Class({
|
|||||||
|
|
||||||
if (this._proxy.State == UPower.DeviceState.DISCHARGING) {
|
if (this._proxy.State == UPower.DeviceState.DISCHARGING) {
|
||||||
// Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
// Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
||||||
return _("%d\u2236%02d Remaining (%d%%)").format(hours, minutes, this._proxy.Percentage);
|
return _("%d\u2236%02d Remaining (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._proxy.State == UPower.DeviceState.CHARGING) {
|
if (this._proxy.State == UPower.DeviceState.CHARGING) {
|
||||||
// Translators: this is <hours>:<minutes> Until Full (<percentage>)
|
// Translators: this is <hours>:<minutes> Until Full (<percentage>)
|
||||||
return _("%d\u2236%02d Until Full (%d%%)").format(hours, minutes, this._proxy.Percentage);
|
return _("%d\u2236%02d Until Full (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -99,10 +111,12 @@ const Indicator = new Lang.Class({
|
|||||||
let visible = this._proxy.IsPresent;
|
let visible = this._proxy.IsPresent;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
this._item.actor.show();
|
this._item.actor.show();
|
||||||
|
this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
|
||||||
} else {
|
} else {
|
||||||
// If there's no battery, then we use the power icon.
|
// If there's no battery, then we use the power icon.
|
||||||
this._item.actor.hide();
|
this._item.actor.hide();
|
||||||
this._indicator.icon_name = 'system-shutdown-symbolic';
|
this._indicator.icon_name = 'system-shutdown-symbolic';
|
||||||
|
this._percentageLabel.hide();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,13 +125,15 @@ const Indicator = new Lang.Class({
|
|||||||
this._indicator.icon_name = icon;
|
this._indicator.icon_name = icon;
|
||||||
this._item.icon.icon_name = icon;
|
this._item.icon.icon_name = icon;
|
||||||
|
|
||||||
// The status label
|
// The icon label
|
||||||
this._item.status.text = this._getStatus();
|
let label
|
||||||
|
if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED)
|
||||||
// The sub-menu heading
|
label = _("%d\u2009%%").format(100);
|
||||||
if (this._proxy.Type == UPower.DeviceKind.UPS)
|
|
||||||
this._item.label.text = _("UPS");
|
|
||||||
else
|
else
|
||||||
this._item.label.text = _("Battery");
|
label = _("%d\u2009%%").format(this._proxy.Percentage);
|
||||||
|
this._percentageLabel.clutter_text.set_markup('<span size="smaller">' + label + '</span>');
|
||||||
|
|
||||||
|
// The status label
|
||||||
|
this._item.label.text = this._getStatus();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -85,9 +85,8 @@ const Indicator = new Lang.Class({
|
|||||||
// The menu only appears when airplane mode is on, so just
|
// The menu only appears when airplane mode is on, so just
|
||||||
// statically build it as if it was on, rather than dynamically
|
// statically build it as if it was on, rather than dynamically
|
||||||
// changing the menu contents.
|
// changing the menu contents.
|
||||||
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode"), true);
|
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode On"), true);
|
||||||
this._item.icon.icon_name = 'airplane-mode-symbolic';
|
this._item.icon.icon_name = 'airplane-mode-symbolic';
|
||||||
this._item.status.text = _("On");
|
|
||||||
this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
|
this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
|
||||||
this._manager.airplaneMode = false;
|
this._manager.airplaneMode = false;
|
||||||
}));
|
}));
|
||||||
|
@ -251,8 +251,14 @@ const Indicator = new Lang.Class({
|
|||||||
let file = Gio.File.new_for_path(iconFile);
|
let file = Gio.File.new_for_path(iconFile);
|
||||||
let gicon = new Gio.FileIcon({ file: file });
|
let gicon = new Gio.FileIcon({ file: file });
|
||||||
this._switchUserSubMenu.icon.gicon = gicon;
|
this._switchUserSubMenu.icon.gicon = gicon;
|
||||||
|
|
||||||
|
this._switchUserSubMenu.icon.add_style_class_name('user-icon');
|
||||||
|
this._switchUserSubMenu.icon.remove_style_class_name('default-icon');
|
||||||
} else {
|
} else {
|
||||||
this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic';
|
this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic';
|
||||||
|
|
||||||
|
this._switchUserSubMenu.icon.add_style_class_name('default-icon');
|
||||||
|
this._switchUserSubMenu.icon.remove_style_class_name('user-icon');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -344,6 +350,9 @@ const Indicator = new Lang.Class({
|
|||||||
this._switchUserSubMenu.menu.addMenuItem(item);
|
this._switchUserSubMenu.menu.addMenuItem(item);
|
||||||
this._logoutItem = item;
|
this._logoutItem = item;
|
||||||
|
|
||||||
|
this._switchUserSubMenu.menu.addSettingsAction(_("Account Settings"),
|
||||||
|
'gnome-user-accounts-panel.desktop');
|
||||||
|
|
||||||
this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu));
|
this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu));
|
||||||
this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu));
|
this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu));
|
||||||
|
|
||||||
|
@ -465,6 +465,12 @@ const ViewSelector = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_shouldTriggerSearch: function(symbol) {
|
_shouldTriggerSearch: function(symbol) {
|
||||||
|
if (symbol == Clutter.Multi_key)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (symbol == Clutter.BackSpace && this._searchActive)
|
||||||
|
return true;
|
||||||
|
|
||||||
let unicode = Clutter.keysym_to_unicode(symbol);
|
let unicode = Clutter.keysym_to_unicode(symbol);
|
||||||
if (unicode == 0)
|
if (unicode == 0)
|
||||||
return false;
|
return false;
|
||||||
@ -472,7 +478,7 @@ const ViewSelector = new Lang.Class({
|
|||||||
if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0)
|
if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return symbol == Clutter.BackSpace && this._searchActive;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
startSearch: function(event) {
|
startSearch: function(event) {
|
||||||
|
@ -81,12 +81,10 @@ const DisplayChangeDialog = new Lang.Class({
|
|||||||
*/
|
*/
|
||||||
this._cancelButton = this.addButton({ label: _("Revert Settings"),
|
this._cancelButton = this.addButton({ label: _("Revert Settings"),
|
||||||
action: Lang.bind(this, this._onFailure),
|
action: Lang.bind(this, this._onFailure),
|
||||||
key: Clutter.Escape },
|
key: Clutter.Escape });
|
||||||
{ expand: true, x_fill: false, x_align: St.Align.START });
|
|
||||||
this._okButton = this.addButton({ label: _("Keep Changes"),
|
this._okButton = this.addButton({ label: _("Keep Changes"),
|
||||||
action: Lang.bind(this, this._onSuccess),
|
action: Lang.bind(this, this._onSuccess),
|
||||||
default: true },
|
default: true });
|
||||||
{ expand: false, x_fill: false, x_align: St.Align.END });
|
|
||||||
|
|
||||||
this._timeoutId = Mainloop.timeout_add(ONE_SECOND, Lang.bind(this, this._tick));
|
this._timeoutId = Mainloop.timeout_add(ONE_SECOND, Lang.bind(this, this._tick));
|
||||||
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick');
|
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick');
|
||||||
@ -477,6 +475,62 @@ const TilePreview = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const TouchpadWorkspaceSwitchAction = new Lang.Class({
|
||||||
|
Name: 'TouchpadWorkspaceSwitchAction',
|
||||||
|
|
||||||
|
_init: function(actor) {
|
||||||
|
this._dx = 0;
|
||||||
|
this._dy = 0;
|
||||||
|
actor.connect('captured-event', Lang.bind(this, this._handleEvent));
|
||||||
|
},
|
||||||
|
|
||||||
|
_checkActivated: function() {
|
||||||
|
const MOTION_THRESHOLD = 50;
|
||||||
|
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
|
||||||
|
let dir;
|
||||||
|
|
||||||
|
if ((allowedModes & Main.actionMode) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this._dy < -MOTION_THRESHOLD)
|
||||||
|
dir = Meta.MotionDirection.DOWN;
|
||||||
|
else if (this._dy > MOTION_THRESHOLD)
|
||||||
|
dir = Meta.MotionDirection.UP;
|
||||||
|
else if (this._dx < -MOTION_THRESHOLD)
|
||||||
|
dir = Meta.MotionDirection.RIGHT;
|
||||||
|
else if (this._dx > MOTION_THRESHOLD)
|
||||||
|
dir = Meta.MotionDirection.LEFT;
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.emit('activated', dir);
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleEvent: function(actor, event) {
|
||||||
|
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE)
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
if (event.get_gesture_swipe_finger_count() != 4)
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
|
||||||
|
let [dx, dy] = event.get_gesture_motion_delta(event);
|
||||||
|
|
||||||
|
this._dx += dx;
|
||||||
|
this._dy += dy;
|
||||||
|
} else {
|
||||||
|
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END)
|
||||||
|
this._checkActivated();
|
||||||
|
|
||||||
|
this._dx = 0;
|
||||||
|
this._dy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype);
|
||||||
|
|
||||||
const WorkspaceSwitchAction = new Lang.Class({
|
const WorkspaceSwitchAction = new Lang.Class({
|
||||||
Name: 'WorkspaceSwitchAction',
|
Name: 'WorkspaceSwitchAction',
|
||||||
Extends: Clutter.SwipeAction,
|
Extends: Clutter.SwipeAction,
|
||||||
@ -623,6 +677,7 @@ const WindowManager = new Lang.Class({
|
|||||||
this._minimizing = [];
|
this._minimizing = [];
|
||||||
this._unminimizing = [];
|
this._unminimizing = [];
|
||||||
this._mapping = [];
|
this._mapping = [];
|
||||||
|
this._resizing = [];
|
||||||
this._destroying = [];
|
this._destroying = [];
|
||||||
this._movingWindow = null;
|
this._movingWindow = null;
|
||||||
|
|
||||||
@ -638,6 +693,7 @@ const WindowManager = new Lang.Class({
|
|||||||
this._minimizeWindowDone(shellwm, actor);
|
this._minimizeWindowDone(shellwm, actor);
|
||||||
this._mapWindowDone(shellwm, actor);
|
this._mapWindowDone(shellwm, actor);
|
||||||
this._destroyWindowDone(shellwm, actor);
|
this._destroyWindowDone(shellwm, actor);
|
||||||
|
this._sizeChangeWindowDone(shellwm, actor);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
|
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
|
||||||
@ -866,15 +922,22 @@ const WindowManager = new Lang.Class({
|
|||||||
false, -1, 1);
|
false, -1, 1);
|
||||||
|
|
||||||
let gesture = new WorkspaceSwitchAction();
|
let gesture = new WorkspaceSwitchAction();
|
||||||
gesture.connect('activated', Lang.bind(this, function(action, direction) {
|
gesture.connect('activated', Lang.bind(this, this._actionSwitchWorkspace));
|
||||||
let newWs = global.screen.get_active_workspace().get_neighbor(direction);
|
|
||||||
this.actionMoveWorkspace(newWs);
|
|
||||||
}));
|
|
||||||
global.stage.add_action(gesture);
|
global.stage.add_action(gesture);
|
||||||
|
|
||||||
|
// This is not a normal Clutter.GestureAction, doesn't need add_action()
|
||||||
|
gesture = new TouchpadWorkspaceSwitchAction(global.stage);
|
||||||
|
gesture.connect('activated', Lang.bind(this, this._actionSwitchWorkspace));
|
||||||
|
|
||||||
gesture = new AppSwitchAction();
|
gesture = new AppSwitchAction();
|
||||||
gesture.connect('activated', Lang.bind(this, this._switchApp));
|
gesture.connect('activated', Lang.bind(this, this._switchApp));
|
||||||
global.stage.add_action(gesture);
|
global.stage.add_action(gesture);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
_actionSwitchWorkspace: function(action, direction) {
|
||||||
|
let newWs = global.screen.get_active_workspace().get_neighbor(direction);
|
||||||
|
this.actionMoveWorkspace(newWs);
|
||||||
},
|
},
|
||||||
|
|
||||||
_lookupIndex: function (windows, metaWindow) {
|
_lookupIndex: function (windows, metaWindow) {
|
||||||
@ -1157,9 +1220,120 @@ const WindowManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
|
_sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
|
||||||
|
let types = [Meta.WindowType.NORMAL];
|
||||||
|
if (!this._shouldAnimateActor(actor, types)) {
|
||||||
|
shellwm.completed_size_change(actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (whichChange == Meta.SizeChange.FULLSCREEN)
|
||||||
|
this._fullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
|
||||||
|
else if (whichChange == Meta.SizeChange.UNFULLSCREEN)
|
||||||
|
this._unfullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
|
||||||
|
else
|
||||||
|
shellwm.completed_size_change(actor);
|
||||||
|
},
|
||||||
|
|
||||||
|
_fullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
|
||||||
|
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||||
|
actor.translation_x = oldFrameRect.x - monitor.x;
|
||||||
|
actor.translation_y = oldFrameRect.y - monitor.y;
|
||||||
|
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
|
||||||
|
},
|
||||||
|
|
||||||
|
_unfullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
|
||||||
|
let targetRect = actor.meta_window.get_frame_rect();
|
||||||
|
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||||
|
actor.translation_x = -(targetRect.x - monitor.x);
|
||||||
|
actor.translation_y = -(targetRect.y - monitor.y);
|
||||||
|
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
|
||||||
|
},
|
||||||
|
|
||||||
|
_fullscreenAnimation: function(shellwm, actor, oldFrameRect) {
|
||||||
|
this._resizing.push(actor);
|
||||||
|
|
||||||
|
// Position a clone of the window on top of the old position,
|
||||||
|
// while actor updates are frozen.
|
||||||
|
// Note that the MetaWindow has up to date sizing information for
|
||||||
|
// the new geometry already.
|
||||||
|
let targetRect = actor.meta_window.get_frame_rect();
|
||||||
|
let actorContent = Shell.util_get_content_for_window_actor(actor, oldFrameRect);
|
||||||
|
let actorClone = new St.Widget({ content: actorContent });
|
||||||
|
actorClone.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
||||||
|
actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
|
||||||
|
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
|
||||||
|
Main.uiGroup.add_actor(actorClone);
|
||||||
|
|
||||||
|
actor.__fullscreenClone = actorClone;
|
||||||
|
|
||||||
|
let scaleX = targetRect.width / oldFrameRect.width;
|
||||||
|
let scaleY = targetRect.height / oldFrameRect.height;
|
||||||
|
|
||||||
|
// Now scale and fade out the clone
|
||||||
|
Tweener.addTween(actorClone,
|
||||||
|
{ x: targetRect.x,
|
||||||
|
y: targetRect.y,
|
||||||
|
scale_x: scaleX,
|
||||||
|
scale_y: scaleY,
|
||||||
|
opacity: 0,
|
||||||
|
time: WINDOW_ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Now set scale the actor to size it as the clone.
|
||||||
|
// Note that the caller of this function already set a translation
|
||||||
|
// on the actor.
|
||||||
|
actor.scale_x = 1 / scaleX;
|
||||||
|
actor.scale_y = 1 / scaleY;
|
||||||
|
|
||||||
|
// Scale it to its actual new size
|
||||||
|
Tweener.addTween(actor,
|
||||||
|
{ scale_x: 1.0,
|
||||||
|
scale_y: 1.0,
|
||||||
|
translation_x: 0,
|
||||||
|
translation_y: 0,
|
||||||
|
time: WINDOW_ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: this._sizeChangeWindowDone,
|
||||||
|
onCompleteScope: this,
|
||||||
|
onCompleteParams: [shellwm, actor],
|
||||||
|
onOverwrite: this._sizeChangeWindowOverwritten,
|
||||||
|
onOverwriteScope: this,
|
||||||
|
onOverwriteParams: [shellwm, actor]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Now unfreeze actor updates, to get it to the new size.
|
||||||
|
// It's important that we don't wait until the animation is completed to
|
||||||
|
// do this, otherwise our scale will be applied to the old texture size.
|
||||||
shellwm.completed_size_change(actor);
|
shellwm.completed_size_change(actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_sizeChangeWindowDone: function(shellwm, actor) {
|
||||||
|
if (this._removeEffect(this._resizing, actor)) {
|
||||||
|
Tweener.removeTweens(actor);
|
||||||
|
actor.scale_x = 1.0;
|
||||||
|
actor.scale_y = 1.0;
|
||||||
|
actor.translation_x = 0;
|
||||||
|
actor.translation_y = 0;
|
||||||
|
|
||||||
|
let actorClone = actor.__fullscreenClone;
|
||||||
|
if (actorClone) {
|
||||||
|
actorClone.destroy();
|
||||||
|
delete actor.__fullscreenClone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_sizeChangeWindowOverwritten: function(shellwm, actor) {
|
||||||
|
if (this._removeEffect(this._resizing, actor)) {
|
||||||
|
let actorClone = actor.__fullscreenClone;
|
||||||
|
if (actorClone) {
|
||||||
|
actorClone.destroy();
|
||||||
|
delete actor.__fullscreenClone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_hasAttachedDialogs: function(window, ignoreWindow) {
|
_hasAttachedDialogs: function(window, ignoreWindow) {
|
||||||
var count = 0;
|
var count = 0;
|
||||||
window.foreach_transient(function(win) {
|
window.foreach_transient(function(win) {
|
||||||
|
@ -74,7 +74,7 @@ const WindowMenu = new Lang.Class({
|
|||||||
window.make_above();
|
window.make_above();
|
||||||
}));
|
}));
|
||||||
if (window.is_above())
|
if (window.is_above())
|
||||||
item.setOrnament(PopupMenu.Ornament.DOT);
|
item.setOrnament(PopupMenu.Ornament.CHECK);
|
||||||
if (window.get_maximized() == Meta.MaximizeFlags.BOTH ||
|
if (window.get_maximized() == Meta.MaximizeFlags.BOTH ||
|
||||||
type == Meta.WindowType.DOCK ||
|
type == Meta.WindowType.DOCK ||
|
||||||
type == Meta.WindowType.DESKTOP ||
|
type == Meta.WindowType.DESKTOP ||
|
||||||
@ -93,7 +93,7 @@ const WindowMenu = new Lang.Class({
|
|||||||
window.stick();
|
window.stick();
|
||||||
}));
|
}));
|
||||||
if (isSticky)
|
if (isSticky)
|
||||||
item.setOrnament(PopupMenu.Ornament.DOT);
|
item.setOrnament(PopupMenu.Ornament.CHECK);
|
||||||
if (window.is_always_on_all_workspaces())
|
if (window.is_always_on_all_workspaces())
|
||||||
item.setSensitive(false);
|
item.setSensitive(false);
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ const WindowMenuManager = new Lang.Class({
|
|||||||
menu.close();
|
menu.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
this._sourceActor.set_size(rect.width, rect.height);
|
this._sourceActor.set_size(Math.max(1, rect.width), Math.max(1, rect.height));
|
||||||
this._sourceActor.set_position(rect.x, rect.y);
|
this._sourceActor.set_position(rect.x, rect.y);
|
||||||
this._sourceActor.show();
|
this._sourceActor.show();
|
||||||
|
|
||||||
|
@ -361,6 +361,9 @@ const WindowClone = new Lang.Class({
|
|||||||
// a long-press canceled when the pointer movement
|
// a long-press canceled when the pointer movement
|
||||||
// exceeds dnd-drag-threshold to manually start the drag
|
// exceeds dnd-drag-threshold to manually start the drag
|
||||||
if (state == Clutter.LongPressState.CANCEL) {
|
if (state == Clutter.LongPressState.CANCEL) {
|
||||||
|
let event = Clutter.get_current_event();
|
||||||
|
this._dragTouchSequence = event.get_event_sequence();
|
||||||
|
|
||||||
// A click cancels a long-press before any click handler is
|
// A click cancels a long-press before any click handler is
|
||||||
// run - make sure to not start a drag in that case
|
// run - make sure to not start a drag in that case
|
||||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||||
@ -369,7 +372,7 @@ const WindowClone = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
let [x, y] = action.get_coords();
|
let [x, y] = action.get_coords();
|
||||||
action.release();
|
action.release();
|
||||||
this._draggable.startDrag(x, y, global.get_current_time());
|
this._draggable.startDrag(x, y, global.get_current_time(), this._dragTouchSequence);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -80,6 +80,8 @@ const WindowClone = new Lang.Class({
|
|||||||
|
|
||||||
this.actor.connect('button-release-event',
|
this.actor.connect('button-release-event',
|
||||||
Lang.bind(this, this._onButtonRelease));
|
Lang.bind(this, this._onButtonRelease));
|
||||||
|
this.actor.connect('touch-event',
|
||||||
|
Lang.bind(this, this._onTouchEvent));
|
||||||
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
@ -200,6 +202,15 @@ const WindowClone = new Lang.Class({
|
|||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onTouchEvent : function (actor, event) {
|
||||||
|
if (event.type() != Clutter.EventType.TOUCH_END ||
|
||||||
|
!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
this.emit('selected', event.get_time());
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
},
|
||||||
|
|
||||||
_onDragBegin : function (draggable, time) {
|
_onDragBegin : function (draggable, time) {
|
||||||
this.inDrag = true;
|
this.inDrag = true;
|
||||||
this.emit('drag-begin');
|
this.emit('drag-begin');
|
||||||
@ -642,6 +653,7 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
|
|
||||||
this.actor.connect('button-press-event', function() { return Clutter.EVENT_STOP; });
|
this.actor.connect('button-press-event', function() { return Clutter.EVENT_STOP; });
|
||||||
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease));
|
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease));
|
||||||
|
this.actor.connect('touch-event', Lang.bind(this, this._onTouchEvent));
|
||||||
|
|
||||||
Main.overview.connect('showing',
|
Main.overview.connect('showing',
|
||||||
Lang.bind(this, this._createThumbnails));
|
Lang.bind(this, this._createThumbnails));
|
||||||
@ -672,18 +684,31 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
global.screen.n_workspaces > 1;
|
global.screen.n_workspaces > 1;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onButtonRelease: function(actor, event) {
|
_activateThumbnailAtPoint: function (stageX, stageY, time) {
|
||||||
let [stageX, stageY] = event.get_coords();
|
|
||||||
let [r, x, y] = this.actor.transform_stage_point(stageX, stageY);
|
let [r, x, y] = this.actor.transform_stage_point(stageX, stageY);
|
||||||
|
|
||||||
for (let i = 0; i < this._thumbnails.length; i++) {
|
for (let i = 0; i < this._thumbnails.length; i++) {
|
||||||
let thumbnail = this._thumbnails[i]
|
let thumbnail = this._thumbnails[i]
|
||||||
let [w, h] = thumbnail.actor.get_transformed_size();
|
let [w, h] = thumbnail.actor.get_transformed_size();
|
||||||
if (y >= thumbnail.actor.y && y <= thumbnail.actor.y + h) {
|
if (y >= thumbnail.actor.y && y <= thumbnail.actor.y + h) {
|
||||||
thumbnail.activate(event.get_time());
|
thumbnail.activate(time);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onButtonRelease: function(actor, event) {
|
||||||
|
let [stageX, stageY] = event.get_coords();
|
||||||
|
this._activateThumbnailAtPoint(stageX, stageY, event.get_time());
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onTouchEvent: function (actor, event) {
|
||||||
|
if (event.type() == Clutter.EventType.TOUCH_END &&
|
||||||
|
global.display.is_pointer_emulating_sequence(event.get_event_sequence())) {
|
||||||
|
let [stageX, stageY] = event.get_coords();
|
||||||
|
this._activateThumbnailAtPoint(stageX, stageY, event.get_time());
|
||||||
|
}
|
||||||
|
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
},
|
},
|
||||||
|
@ -421,7 +421,7 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
// Only switch to the workspace when there's no application
|
// Only switch to the workspace when there's no application
|
||||||
// windows open. The problem is that it's too easy to miss
|
// windows open. The problem is that it's too easy to miss
|
||||||
// an app window and get the wrong one focused.
|
// an app window and get the wrong one focused.
|
||||||
if (action.get_button() == 1 &&
|
if ((action.get_button() == 1 || action.get_button() == 0) &&
|
||||||
this._getPrimaryView().getActiveWorkspace().isEmpty())
|
this._getPrimaryView().getActiveWorkspace().isEmpty())
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
}));
|
}));
|
||||||
|
@ -140,7 +140,7 @@
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<filename>/usr/share/gnome-session/sessions/gnome.session</filename>,
|
<filename>/usr/share/gnome-session/sessions/gnome.session</filename>,
|
||||||
<filename>/usr/share/applications/gnome-shell.desktop</filename>.</para>
|
<filename>/usr/share/applications/org.gnome.Shell.desktop</filename>.</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
@ -24,6 +24,7 @@ fi
|
|||||||
fr
|
fr
|
||||||
fur
|
fur
|
||||||
ga
|
ga
|
||||||
|
gd
|
||||||
gl
|
gl
|
||||||
gu
|
gu
|
||||||
he
|
he
|
||||||
|
@ -2,9 +2,8 @@
|
|||||||
# Please keep this file sorted alphabetically.
|
# Please keep this file sorted alphabetically.
|
||||||
[encoding: UTF-8]
|
[encoding: UTF-8]
|
||||||
data/50-gnome-shell-system.xml.in
|
data/50-gnome-shell-system.xml.in
|
||||||
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/org.gnome.Shell.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
|
data/org.gnome.Shell.PortalHelper.desktop.in
|
||||||
js/extensionPrefs/main.js
|
js/extensionPrefs/main.js
|
||||||
|
297
po/an.po
297
po/an.po
@ -9,24 +9,23 @@ 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: 2015-03-17 12:39+0000\n"
|
"POT-Creation-Date: 2015-07-23 08:08+0000\n"
|
||||||
"PO-Revision-Date: 2015-03-17 19:50+0100\n"
|
"PO-Revision-Date: 2015-04-28 08:40+0200\n"
|
||||||
"Last-Translator: Daniel Martinez <entaltoaragon@gmail.com>\n"
|
"Last-Translator: Daniel <entaltoaragon@gmail.com>\n"
|
||||||
"Language-Team: Aragonés <softaragones@googlegroups.com>\n"
|
"Language-Team: Aragonés <softaragones@googlegroups.com>\n"
|
||||||
"Language: an\n"
|
"Language: an\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"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: Gtranslator 2.91.6\n"
|
"X-Generator: Pootle 2.5.1.1\n"
|
||||||
|
"X-POOTLE-MTIME: 1430206804.000000\n"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "Sistema"
|
msgstr "Sistema"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:2
|
#: ../data/50-gnome-shell-system.xml.in.h:2
|
||||||
#| msgid "%d new notification"
|
|
||||||
#| msgid_plural "%d new notifications"
|
|
||||||
msgid "Show the notification list"
|
msgid "Show the notification list"
|
||||||
msgstr "Amostrar a lista de notificacions"
|
msgstr "Amostrar a lista de notificacions"
|
||||||
|
|
||||||
@ -136,17 +135,18 @@ msgstr "Indiz de l'anvista seleccionada actual en o selector d'aplicacion."
|
|||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Historico d'o dialogo de comandos (Alt+F2)"
|
msgstr "Historico d'o dialogo de comandos (Alt+F2)"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
#. Translators: looking glass is a debugger and inspector tool, see https://live.gnome.org/GnomeShell/LookingGlass
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "Historico d'o dialogo de \"looking glass\""
|
msgstr "Historico d'o dialogo de \"looking glass\""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
msgid "Always show the 'Log out' menu item in the user menu."
|
msgid "Always show the 'Log out' menu item in the user menu."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Amostrar siempre l'elemento de menú \"Trancar sesión\" en o menú de "
|
"Amostrar siempre l'elemento de menú \"Trancar sesión\" en o menú de "
|
||||||
"l'usuario."
|
"l'usuario."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
|
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
|
||||||
"user, single-session situations."
|
"user, single-session situations."
|
||||||
@ -154,14 +154,14 @@ msgstr ""
|
|||||||
"Ista clau sobrescribe a ocultación automatica de l'elemento de menú "
|
"Ista clau sobrescribe a ocultación automatica de l'elemento de menú "
|
||||||
"\"Trancar sesión\" en situacions d'un solo usuario u d'una sola sesión."
|
"\"Trancar sesión\" en situacions d'un solo usuario u d'una sola sesión."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Indica si se debe recordar a clau ta amontar sistemas de fichers remotos u "
|
"Indica si se debe recordar a clau ta amontar sistemas de fichers remotos u "
|
||||||
"zifraus"
|
"zifraus"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell will request a password when an encrypted device or a remote "
|
"The shell will request a password when an encrypted device or a remote "
|
||||||
"filesystem is mounted. If the password can be saved for future use a "
|
"filesystem is mounted. If the password can be saved for future use a "
|
||||||
@ -173,81 +173,79 @@ msgstr ""
|
|||||||
"s'amostrará a caixeta \"Remerar clau\". Ista clau estableix a valor "
|
"s'amostrará a caixeta \"Remerar clau\". Ista clau estableix a valor "
|
||||||
"predeterminada d'a caixeta."
|
"predeterminada d'a caixeta."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Amostrar a calendata d'a semana en o calendario"
|
msgstr "Amostrar a calendata d'a semana en o calendario"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Si ye cierta, amuestra a calendata de semana ISO en o calandario."
|
msgstr "Si ye cierta, amuestra a calendata de semana ISO en o calandario."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Asociación de teclas ta ubrir o menú de l'aplicación"
|
msgstr "Asociación de teclas ta ubrir o menú de l'aplicación"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Asociación de teclas ta ubrir o menú de l'aplicación."
|
msgstr "Asociación de teclas ta ubrir o menú de l'aplicación."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to open the \"Show Applications\" view"
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
msgstr "Asociación de teclas ta la vista \"Amostrar aplicacions\""
|
msgstr "Asociación de teclas ta la vista \"Amostrar aplicacions\""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Asociación de teclas ta ubrir la vista \"Amostrar aplicacions\" de la vista "
|
"Asociación de teclas ta ubrir la vista \"Amostrar aplicacions\" de la vista "
|
||||||
"d'actividatz."
|
"d'actividatz."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "Keybinding to open the overview"
|
msgid "Keybinding to open the overview"
|
||||||
msgstr "Asociación de teclas ta l'anvista cheneral"
|
msgstr "Asociación de teclas ta l'anvista cheneral"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Keybinding to open the Activities Overview."
|
msgid "Keybinding to open the Activities Overview."
|
||||||
msgstr "Asociación de teclas ta ubrir l'anvista d'actividatz"
|
msgstr "Asociación de teclas ta ubrir l'anvista d'actividatz"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
#| msgid "Keybinding to toggle the visibility of the message tray"
|
|
||||||
msgid "Keybinding to toggle the visibility of the notification list"
|
msgid "Keybinding to toggle the visibility of the notification list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions"
|
"Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
#| msgid "Keybinding to toggle the visibility of the message tray."
|
|
||||||
msgid "Keybinding to toggle the visibility of the notification list."
|
msgid "Keybinding to toggle the visibility of the notification list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions."
|
"Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||||
msgid "Keybinding to focus the active notification"
|
msgid "Keybinding to focus the active notification"
|
||||||
msgstr "Asociación de teclas ta dar o foco a la notificación activa"
|
msgstr "Asociación de teclas ta dar o foco a la notificación activa"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
msgid "Keybinding to focus the active notification."
|
msgid "Keybinding to focus the active notification."
|
||||||
msgstr "Asociación de teclas ta dar o foco a la notificación activa."
|
msgstr "Asociación de teclas ta dar o foco a la notificación activa."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Asociación de teclas que pausan y continan todas as execucions de «tweens», "
|
"Asociación de teclas que pausan y continan todas as execucions de «tweens», "
|
||||||
"ta propositos de depuraci'on"
|
"ta propositos de depuraci'on"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Que teclau usar"
|
msgstr "Que teclau usar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "O tipo de teclau que usar."
|
msgstr "O tipo de teclau que usar."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||||
msgid "Limit switcher to current workspace."
|
msgid "Limit switcher to current workspace."
|
||||||
msgstr "Selector de limite ta l'aria de treballo actual."
|
msgstr "Selector de limite ta l'aria de treballo actual."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, only applications that have windows on the current workspace are "
|
"If true, only applications that have windows on the current workspace are "
|
||||||
"shown in the switcher. Otherwise, all applications are included."
|
"shown in the switcher. Otherwise, all applications are included."
|
||||||
@ -256,21 +254,21 @@ msgstr ""
|
|||||||
"finestras en l'aria de treballo actual. D'atra man, s'incluirán todas as "
|
"finestras en l'aria de treballo actual. D'atra man, s'incluirán todas as "
|
||||||
"aplicacions."
|
"aplicacions."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "The application icon mode."
|
msgid "The application icon mode."
|
||||||
msgstr "O modo d'icono de l'aplicación."
|
msgstr "O modo d'icono de l'aplicación."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||||
msgid ""
|
msgid ""
|
||||||
"Configures how the windows are shown in the switcher. Valid possibilities "
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' "
|
||||||
"only' (shows only the application icon) or 'both'."
|
"(shows only the application icon) or 'both'."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Configura cómo s'amuestran as finestras en o selector. Os valore posibles "
|
"Configura cómo s'amuestran as finestras en o selector. Os valore posibles "
|
||||||
"son \"thumbnail-only\" (amuestra una miniatura d'a finestra), \"app-icon-only"
|
"son \"thumbnail-only\" (amuestra una miniatura d'a finestra), \"app-icon-"
|
||||||
"\" (solament amuestra l'icono de l'aplicación) u \"both\"."
|
"only\" (solament amuestra l'icono de l'aplicación) u \"both\"."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
msgid ""
|
msgid ""
|
||||||
"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."
|
||||||
@ -278,31 +276,31 @@ msgstr ""
|
|||||||
"Si en ye verdadero, nomás s'amostrarán en o selector finestras de l'aria de "
|
"Si en ye verdadero, nomás s'amostrarán en o selector finestras de l'aria de "
|
||||||
"treballo actual. D'atra man, s'incluirán todas as finestras."
|
"treballo actual. D'atra man, s'incluirán todas as finestras."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "Attach modal dialog to the parent window"
|
msgid "Attach modal dialog to the parent window"
|
||||||
msgstr "Acoplar un dialogo modal a la finestra pai"
|
msgstr "Acoplar un dialogo modal a la finestra pai"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ista clau sobrescribe a clau en org.gnome.mutter en executar GNOME Shell."
|
"Ista clau sobrescribe a clau en org.gnome.mutter en executar GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Activar o mosaico en os bordes en arrocegar finestras a os bordes d'a "
|
"Activar o mosaico en os bordes en arrocegar finestras a os bordes d'a "
|
||||||
"finestra"
|
"finestra"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "As arias de treballo se chestionan dinámicamente"
|
msgstr "As arias de treballo se chestionan dinámicamente"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Arias de treballo solament en a pantalla prencipal"
|
msgstr "Arias de treballo solament en a pantalla prencipal"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||||
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 ""
|
msgstr ""
|
||||||
"Retardo en cambiar o foco d'o churi dica que o puntero deixa de mover-se"
|
"Retardo en cambiar o foco d'o churi dica que o puntero deixa de mover-se"
|
||||||
@ -311,12 +309,12 @@ msgstr ""
|
|||||||
msgid "Network Login"
|
msgid "Network Login"
|
||||||
msgstr "Encetar sesión en o rete"
|
msgstr "Encetar sesión en o rete"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:123
|
#: ../js/extensionPrefs/main.js:122
|
||||||
#, 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 "I habió una error en lanzar o diálogo de preferencias ta %s:"
|
msgstr "I habió una error en lanzar o diálogo de preferencias ta %s:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:155
|
#: ../js/extensionPrefs/main.js:154
|
||||||
msgid "GNOME Shell Extensions"
|
msgid "GNOME Shell Extensions"
|
||||||
msgstr "Extensions de GNOME Shell"
|
msgstr "Extensions de GNOME Shell"
|
||||||
|
|
||||||
@ -327,39 +325,39 @@ msgstr "Extensions de GNOME Shell"
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
|
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Siguient"
|
msgstr "Siguient"
|
||||||
|
|
||||||
#: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
|
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
|
||||||
#: ../js/ui/unlockDialog.js:59
|
#: ../js/ui/unlockDialog.js:59
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Desbloquiar"
|
msgstr "Desbloquiar"
|
||||||
|
|
||||||
#: ../js/gdm/authPrompt.js:215
|
#: ../js/gdm/authPrompt.js:213
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Encetar sesión"
|
msgstr "Encetar sesión"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:280
|
#: ../js/gdm/loginDialog.js:281
|
||||||
msgid "Choose Session"
|
msgid "Choose Session"
|
||||||
msgstr "Esleyir a sesión"
|
msgstr "Esleyir a sesión"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:420
|
#: ../js/gdm/loginDialog.js:431
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "No ye en a lista?"
|
msgstr "No ye en a lista?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:829
|
#: ../js/gdm/loginDialog.js:847
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(eix., usuario u %s)"
|
msgstr "(eix., usuario u %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:834 ../js/ui/components/networkAgent.js:271
|
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
|
||||||
#: ../js/ui/components/networkAgent.js:289
|
#: ../js/ui/components/networkAgent.js:289
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nombre d'usuario:"
|
msgstr "Nombre d'usuario: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1169
|
#: ../js/gdm/loginDialog.js:1180
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Finestra d'inicio de sesión"
|
msgstr "Finestra d'inicio de sesión"
|
||||||
|
|
||||||
@ -452,31 +450,31 @@ msgstr "%d de %B de %Y, %l∶%M %"
|
|||||||
msgid "Web Authentication Redirect"
|
msgid "Web Authentication Redirect"
|
||||||
msgstr "Rendrecera ta autentiación web"
|
msgstr "Rendrecera ta autentiación web"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:792
|
#: ../js/ui/appDisplay.js:789
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
msgstr "As aplicaciones usadas freqüentment amaneixerán aquí"
|
msgstr "As aplicaciones usadas freqüentment amaneixerán aquí"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:912
|
#: ../js/ui/appDisplay.js:909
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Freqüent"
|
msgstr "Freqüent"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:919
|
#: ../js/ui/appDisplay.js:916
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Todas"
|
msgstr "Todas"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1850
|
#: ../js/ui/appDisplay.js:1845
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Finestra nueva"
|
msgstr "Finestra nueva"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1878 ../js/ui/dash.js:291
|
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Sacar d'os favoritos"
|
msgstr "Sacar d'os favoritos"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1884
|
#: ../js/ui/appDisplay.js:1879
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Anyadir a os favoritos"
|
msgstr "Anyadir a os favoritos"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1894
|
#: ../js/ui/appDisplay.js:1889
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Amostrar detalles"
|
msgstr "Amostrar detalles"
|
||||||
|
|
||||||
@ -490,15 +488,19 @@ msgstr "S'ha anyadiu %s a os suyos favoritos."
|
|||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "S'ha sacau %s d'os suyos favoritos"
|
msgstr "S'ha sacau %s d'os suyos favoritos"
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650
|
#: ../js/ui/backgroundMenu.js:19
|
||||||
#: ../js/ui/status/system.js:337
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Configuración"
|
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:21
|
|
||||||
msgid "Change Background…"
|
msgid "Change Background…"
|
||||||
msgstr "Cambiar o fondo…"
|
msgstr "Cambiar o fondo…"
|
||||||
|
|
||||||
|
#: ../js/ui/backgroundMenu.js:21
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Preferencias de pantalla"
|
||||||
|
|
||||||
|
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
|
||||||
|
#: ../js/ui/status/system.js:357
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Configuración"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
|
||||||
#: ../js/ui/calendar.js:53
|
#: ../js/ui/calendar.js:53
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
@ -551,54 +553,53 @@ msgctxt "grid saturday"
|
|||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:563
|
#: ../js/ui/calendar.js:564
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Mes anterior"
|
msgstr "Mes anterior"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:573
|
#: ../js/ui/calendar.js:574
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Mes siguient"
|
msgstr "Mes siguient"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:780
|
#: ../js/ui/calendar.js:781
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "Semana %V"
|
msgstr "Semana %V"
|
||||||
|
|
||||||
#. 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:1182
|
#: ../js/ui/calendar.js:1187
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "All Day"
|
msgid "All Day"
|
||||||
msgstr "Tot o diya"
|
msgstr "Tot o diya"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:1288
|
#: ../js/ui/calendar.js:1289
|
||||||
msgid "Clear section"
|
msgid "Clear section"
|
||||||
msgstr "Limpiar a sección"
|
msgstr "Limpiar a sección"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:1515
|
#: ../js/ui/calendar.js:1516
|
||||||
msgid "Events"
|
msgid "Events"
|
||||||
msgstr "Eventos"
|
msgstr "Eventos"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:1524
|
#: ../js/ui/calendar.js:1525
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d de %B"
|
msgstr "%A, %d de %B"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:1528
|
#: ../js/ui/calendar.js:1529
|
||||||
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:1613
|
#: ../js/ui/calendar.js:1614
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Notificacions"
|
msgstr "Notificacions"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:1764
|
#: ../js/ui/calendar.js:1765
|
||||||
#| msgid "Notifications"
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "No i hai notificacions"
|
msgstr "No i hai notificacions"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:1767
|
#: ../js/ui/calendar.js:1768
|
||||||
msgid "No Events"
|
msgid "No Events"
|
||||||
msgstr "No i hai eventos"
|
msgstr "No i hai eventos"
|
||||||
|
|
||||||
@ -634,23 +635,23 @@ msgstr "Connectar"
|
|||||||
#: ../js/ui/components/networkAgent.js:293
|
#: ../js/ui/components/networkAgent.js:293
|
||||||
#: ../js/ui/components/networkAgent.js:303
|
#: ../js/ui/components/networkAgent.js:303
|
||||||
msgid "Password: "
|
msgid "Password: "
|
||||||
msgstr "Clau de paso:"
|
msgstr "Clau de paso: "
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:238
|
#: ../js/ui/components/networkAgent.js:238
|
||||||
msgid "Key: "
|
msgid "Key: "
|
||||||
msgstr "Clau:"
|
msgstr "Clau: "
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:277
|
#: ../js/ui/components/networkAgent.js:277
|
||||||
msgid "Identity: "
|
msgid "Identity: "
|
||||||
msgstr "Identidat:"
|
msgstr "Identidat: "
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:279
|
#: ../js/ui/components/networkAgent.js:279
|
||||||
msgid "Private key password: "
|
msgid "Private key password: "
|
||||||
msgstr "Clau d'a clau privada:"
|
msgstr "Clau d'a clau privada: "
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:291
|
#: ../js/ui/components/networkAgent.js:291
|
||||||
msgid "Service: "
|
msgid "Service: "
|
||||||
msgstr "Servicio:"
|
msgstr "Servicio: "
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:320
|
#: ../js/ui/components/networkAgent.js:320
|
||||||
#: ../js/ui/components/networkAgent.js:658
|
#: ../js/ui/components/networkAgent.js:658
|
||||||
@ -661,8 +662,8 @@ msgstr "O ret sin cordón requiere autenticación"
|
|||||||
#: ../js/ui/components/networkAgent.js:659
|
#: ../js/ui/components/networkAgent.js:659
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Passwords or encryption keys are required to access the wireless network "
|
"Passwords or encryption keys are required to access the wireless network “"
|
||||||
"“%s”."
|
"%s”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"S'amenesten claus u claus de zifrau ta accedir a o ret inalambrico\"%s\"."
|
"S'amenesten claus u claus de zifrau ta accedir a o ret inalambrico\"%s\"."
|
||||||
|
|
||||||
@ -673,7 +674,7 @@ msgstr "Autenticación 802.1X cableada"
|
|||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:327
|
#: ../js/ui/components/networkAgent.js:327
|
||||||
msgid "Network name: "
|
msgid "Network name: "
|
||||||
msgstr "Nombre d'o ret:"
|
msgstr "Nombre d'o ret: "
|
||||||
|
|
||||||
#: ../js/ui/components/networkAgent.js:332
|
#: ../js/ui/components/networkAgent.js:332
|
||||||
#: ../js/ui/components/networkAgent.js:666
|
#: ../js/ui/components/networkAgent.js:666
|
||||||
@ -733,7 +734,7 @@ msgstr "Prebe atra vegada."
|
|||||||
|
|
||||||
#. 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:768
|
#: ../js/ui/components/telepathyClient.js:757
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "Agora %s se dice %s"
|
msgstr "Agora %s se dice %s"
|
||||||
@ -742,11 +743,11 @@ msgstr "Agora %s se dice %s"
|
|||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Finestras"
|
msgstr "Finestras"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:252 ../js/ui/dash.js:293
|
#: ../js/ui/dash.js:250 ../js/ui/dash.js:291
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Amostrar aplicacions"
|
msgstr "Amostrar aplicacions"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:453
|
#: ../js/ui/dash.js:449
|
||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Tablero"
|
msgstr "Tablero"
|
||||||
|
|
||||||
@ -754,7 +755,6 @@ msgstr "Tablero"
|
|||||||
#. * 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:73
|
#: ../js/ui/dateMenu.js:73
|
||||||
#| msgid "%A %B %e, %Y"
|
|
||||||
msgid "%B %e %Y"
|
msgid "%B %e %Y"
|
||||||
msgstr "%B %e %Y"
|
msgstr "%B %e %Y"
|
||||||
|
|
||||||
@ -763,7 +763,6 @@ msgstr "%B %e %Y"
|
|||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#. */
|
#. */
|
||||||
#: ../js/ui/dateMenu.js:80
|
#: ../js/ui/dateMenu.js:80
|
||||||
#| msgid "%A %B %e, %Y"
|
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%A %e de %B de %Y"
|
msgstr "%A %e de %B de %Y"
|
||||||
|
|
||||||
@ -772,7 +771,6 @@ msgid "Add world clocks…"
|
|||||||
msgstr "Adhibir reloches d'o mundo…"
|
msgstr "Adhibir reloches d'o mundo…"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:161
|
#: ../js/ui/dateMenu.js:161
|
||||||
#| msgid "Open Clocks"
|
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Reloches d'o mundo"
|
msgstr "Reloches d'o mundo"
|
||||||
|
|
||||||
@ -916,17 +914,16 @@ msgstr "Instalar"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Descargar y instalar \"%s\" dende extensions.gnome.org?"
|
msgstr "Descargar y instalar \"%s\" dende extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:714 ../js/ui/status/keyboard.js:580
|
#: ../js/ui/keyboard.js:747 ../js/ui/status/keyboard.js:713
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclau"
|
msgstr "Teclau"
|
||||||
|
|
||||||
#. translators: 'Hide' is a verb */
|
#. translators: 'Hide' is a verb */
|
||||||
#: ../js/ui/legacyTray.js:64
|
#: ../js/ui/legacyTray.js:66
|
||||||
#| msgid "Hide Text"
|
|
||||||
msgid "Hide tray"
|
msgid "Hide tray"
|
||||||
msgstr "Amagar servilla"
|
msgstr "Amagar servilla"
|
||||||
|
|
||||||
#: ../js/ui/legacyTray.js:104
|
#: ../js/ui/legacyTray.js:107
|
||||||
msgid "Status Icons"
|
msgid "Status Icons"
|
||||||
msgstr "Iconos d'estau"
|
msgstr "Iconos d'estau"
|
||||||
|
|
||||||
@ -982,7 +979,7 @@ msgstr "Veyer fuent"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Pachina web"
|
msgstr "Pachina web"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2133
|
#: ../js/ui/messageTray.js:1486
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informacion d'o sistema"
|
msgstr "Informacion d'o sistema"
|
||||||
|
|
||||||
@ -1024,7 +1021,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Introducir un comando"
|
msgstr "Introducir un comando"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:120
|
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Trancar"
|
msgstr "Trancar"
|
||||||
|
|
||||||
@ -1052,27 +1049,27 @@ msgid_plural "%d new notifications"
|
|||||||
msgstr[0] "%d notificación nueva"
|
msgstr[0] "%d notificación nueva"
|
||||||
msgstr[1] "%d notificacions nuevas"
|
msgstr[1] "%d notificacions nuevas"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:345
|
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Blocar"
|
msgstr "Blocar"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:668
|
#: ../js/ui/screenShield.js:684
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "GNOME ameneste blocar a pantalla"
|
msgstr "GNOME ameneste blocar a pantalla"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:795 ../js/ui/screenShield.js:1271
|
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "No se podió blocar"
|
msgstr "No se podió blocar"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:796 ../js/ui/screenShield.js:1272
|
#: ../js/ui/screenShield.js:806 ../js/ui/screenShield.js:1272
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Una aplicación impidió o bloqueyo"
|
msgstr "Una aplicación impidió o bloqueyo"
|
||||||
|
|
||||||
#: ../js/ui/search.js:616
|
#: ../js/ui/search.js:617
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Mirando…"
|
msgstr "Mirando…"
|
||||||
|
|
||||||
#: ../js/ui/search.js:618
|
#: ../js/ui/search.js:619
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "No se troboron resultaus."
|
msgstr "No se troboron resultaus."
|
||||||
|
|
||||||
@ -1136,11 +1133,11 @@ msgstr "Refuso de teclas"
|
|||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Teclas d'o ratet"
|
msgstr "Teclas d'o ratet"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:144
|
#: ../js/ui/status/accessibility.js:167
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Contraste alto"
|
msgstr "Contraste alto"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:193
|
#: ../js/ui/status/accessibility.js:202
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Texto gran"
|
msgstr "Texto gran"
|
||||||
|
|
||||||
@ -1174,7 +1171,7 @@ msgstr "No connectau"
|
|||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
msgstr "Brilo"
|
msgstr "Brilo"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:603
|
#: ../js/ui/status/keyboard.js:736
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Amostrar a distribución d'o teclau"
|
msgstr "Amostrar a distribución d'o teclau"
|
||||||
|
|
||||||
@ -1268,7 +1265,7 @@ msgstr "O modo avión ye enchegau"
|
|||||||
|
|
||||||
#: ../js/ui/status/network.js:814
|
#: ../js/ui/status/network.js:814
|
||||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||||
msgstr "O Wi-Fi ye desactivau quan o modo avión ye enchegau."
|
msgstr "O Wi-Fi ye desactivau quan o modo avión ye enchegau."
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:815
|
#: ../js/ui/status/network.js:815
|
||||||
msgid "Turn Off Airplane Mode"
|
msgid "Turn Off Airplane Mode"
|
||||||
@ -1385,23 +1382,23 @@ msgstr "Modo avión"
|
|||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "Enchegau"
|
msgstr "Enchegau"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:317
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambear d'usuario"
|
msgstr "Cambear d'usuario"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:322
|
#: ../js/ui/status/system.js:342
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Trancar sesion"
|
msgstr "Trancar sesion"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:341
|
#: ../js/ui/status/system.js:361
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Bloqueyo d'Orientación"
|
msgstr "Bloqueyo d'Orientación"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:369
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Suspender"
|
msgstr "Suspender"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:352
|
#: ../js/ui/status/system.js:372
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Amortar"
|
msgstr "Amortar"
|
||||||
|
|
||||||
@ -1433,27 +1430,27 @@ msgstr "Aplicacions"
|
|||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Mirar"
|
msgstr "Mirar"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:19
|
#: ../js/ui/windowAttentionHandler.js:20
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "“%s” is ready"
|
msgid "“%s” is ready"
|
||||||
msgstr "\"%s\" ye parau"
|
msgstr "\"%s\" ye parau"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:65
|
#: ../js/ui/windowManager.js:63
|
||||||
msgid "Do you want to keep these display settings?"
|
msgid "Do you want to keep these display settings?"
|
||||||
msgstr "Quiers mantener istas opcions de pantalla?"
|
msgstr "Quiers mantener istas opcions de pantalla?"
|
||||||
|
|
||||||
#. 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:84
|
#: ../js/ui/windowManager.js:82
|
||||||
msgid "Revert Settings"
|
msgid "Revert Settings"
|
||||||
msgstr "Revertir as opcions"
|
msgstr "Revertir as opcions"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:88
|
#: ../js/ui/windowManager.js:86
|
||||||
msgid "Keep Changes"
|
msgid "Keep Changes"
|
||||||
msgstr "Mantener os cambeos"
|
msgstr "Mantener os cambeos"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:107
|
#: ../js/ui/windowManager.js:105
|
||||||
#, 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"
|
||||||
@ -1462,7 +1459,7 @@ msgstr[1] "Os cambeos d'as opcions serán revertius en %d segundos"
|
|||||||
|
|
||||||
#. Translators: This represents the size of a window. The first number is
|
#. Translators: This represents the size of a window. The first number is
|
||||||
#. * the width of the window and the second is the height. */
|
#. * the width of the window and the second is the height. */
|
||||||
#: ../js/ui/windowManager.js:599
|
#: ../js/ui/windowManager.js:660
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d x %d"
|
msgid "%d x %d"
|
||||||
msgstr "%d x %d"
|
msgstr "%d x %d"
|
||||||
@ -1499,14 +1496,48 @@ msgstr "Siempre veyible"
|
|||||||
msgid "Always on Visible Workspace"
|
msgid "Always on Visible Workspace"
|
||||||
msgstr "Siempre en l'aria de treballo veyible"
|
msgstr "Siempre en l'aria de treballo veyible"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:106
|
#: ../js/ui/windowMenu.js:105
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Move to Workspace Up"
|
||||||
|
msgid "Move to Workspace Left"
|
||||||
|
msgstr "Mover a l'aria de treballo d'a cucha"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:110
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Move to Workspace Up"
|
||||||
|
msgid "Move to Workspace Right"
|
||||||
|
msgstr "Mover a l'aria de treballo d'a dreita"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:115
|
||||||
msgid "Move to Workspace Up"
|
msgid "Move to Workspace Up"
|
||||||
msgstr "Mover ta l'aria de treballo d'alto"
|
msgstr "Mover ta l'aria de treballo d'alto"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:111
|
#: ../js/ui/windowMenu.js:120
|
||||||
msgid "Move to Workspace Down"
|
msgid "Move to Workspace Down"
|
||||||
msgstr "Mover ta l'aria de treballo d'abaixo"
|
msgstr "Mover ta l'aria de treballo d'abaixo"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:136
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Move to Workspace Up"
|
||||||
|
msgid "Move to Monitor Up"
|
||||||
|
msgstr "Mover a la pantalla d'alto"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:142
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Move to Workspace Down"
|
||||||
|
msgid "Move to Monitor Down"
|
||||||
|
msgstr "Mover a la pantalla d'abaixo"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:148
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Move to Monitor Left"
|
||||||
|
msgstr "Mover a la pantalla d'a cucha"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:154
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Move to Monitor Right"
|
||||||
|
msgstr "Mover a la pantalla d'a dreita"
|
||||||
|
|
||||||
#: ../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 "Calandario d'Evolution"
|
msgstr "Calandario d'Evolution"
|
||||||
@ -1561,11 +1592,11 @@ msgstr "Desconoxiu"
|
|||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Ha fallau en aventar \"%s\""
|
msgstr "Ha fallau en aventar \"%s\""
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:714
|
#: ../src/shell-keyring-prompt.c:742
|
||||||
msgid "Passwords do not match."
|
msgid "Passwords do not match."
|
||||||
msgstr "As claus de paso no coinciden."
|
msgstr "As claus de paso no coinciden."
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:722
|
#: ../src/shell-keyring-prompt.c:750
|
||||||
msgid "Password cannot be blank"
|
msgid "Password cannot be blank"
|
||||||
msgstr "A clau de paso no puede estar vueda"
|
msgstr "A clau de paso no puede estar vueda"
|
||||||
|
|
||||||
@ -1803,14 +1834,6 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
|
|||||||
#~ msgid "The maximum accuracy level of location."
|
#~ msgid "The maximum accuracy level of location."
|
||||||
#~ msgstr "O maximo libel de precisión d'ubicación."
|
#~ msgstr "O maximo libel de precisión d'ubicación."
|
||||||
|
|
||||||
#~| msgid ""
|
|
||||||
#~| "Configures the maximum level of location accuracy applications are "
|
|
||||||
#~| "allowed to see. Valid options are 'off' (disable location tracking), "
|
|
||||||
#~| "'country', 'city', 'neighborhood', 'street', and 'exact' (typically "
|
|
||||||
#~| "requires GPS 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 using network resources (albeit with street-level accuracy "
|
|
||||||
#~| "at best)."
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "Configures the maximum level of location accuracy applications are "
|
#~ "Configures the maximum level of location accuracy applications are "
|
||||||
#~ "allowed to see. Valid options are 'off' (disable location tracking), "
|
#~ "allowed to see. Valid options are 'off' (disable location tracking), "
|
||||||
@ -1822,8 +1845,8 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
|
|||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Configura o ran maximo de precisión d'ubicación que as aplicacions "
|
#~ "Configura o ran maximo de precisión d'ubicación que as aplicacions "
|
||||||
#~ "pueden veyer. As opcions validas son 'off' (seguimiento d'ubicación "
|
#~ "pueden veyer. As opcions validas son 'off' (seguimiento d'ubicación "
|
||||||
#~ "desenchegau), 'country', 'city', 'neighborhood', 'street', and "
|
#~ "desenchegau), 'country', 'city', 'neighborhood', 'street', and 'exact' "
|
||||||
#~ "'exact' (typicament requier GPS "
|
#~ "(typicament requier GPS "
|
||||||
|
|
||||||
#~ msgid "Arrangement of buttons on the titlebar"
|
#~ msgid "Arrangement of buttons on the titlebar"
|
||||||
#~ msgstr "Orden d'os botons en a barra de titol"
|
#~ msgstr "Orden d'os botons en a barra de titol"
|
||||||
@ -1968,7 +1991,6 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
|
|||||||
#~ msgid "Session…"
|
#~ msgid "Session…"
|
||||||
#~ msgstr "Sesión…"
|
#~ msgstr "Sesión…"
|
||||||
|
|
||||||
#~| msgid "Power Off"
|
|
||||||
#~ msgid "Power"
|
#~ msgid "Power"
|
||||||
#~ msgstr "Enerchía"
|
#~ msgstr "Enerchía"
|
||||||
|
|
||||||
@ -2132,11 +2154,9 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
|
|||||||
#~ msgid "%d%%"
|
#~ msgid "%d%%"
|
||||||
#~ msgstr "%d%%"
|
#~ msgstr "%d%%"
|
||||||
|
|
||||||
#~| msgid "AC adapter"
|
|
||||||
#~ msgid "AC Adapter"
|
#~ msgid "AC Adapter"
|
||||||
#~ msgstr "Adaptador de corrient"
|
#~ msgstr "Adaptador de corrient"
|
||||||
|
|
||||||
#~| msgid "Laptop battery"
|
|
||||||
#~ msgid "Laptop Battery"
|
#~ msgid "Laptop Battery"
|
||||||
#~ msgstr "Bateria d'o portatil"
|
#~ msgstr "Bateria d'o portatil"
|
||||||
|
|
||||||
@ -2149,11 +2169,9 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
|
|||||||
#~ msgid "PDA"
|
#~ msgid "PDA"
|
||||||
#~ msgstr "PDA"
|
#~ msgstr "PDA"
|
||||||
|
|
||||||
#~| msgid "Cell phone"
|
|
||||||
#~ msgid "Cell Phone"
|
#~ msgid "Cell Phone"
|
||||||
#~ msgstr "Telefono movil"
|
#~ msgstr "Telefono movil"
|
||||||
|
|
||||||
#~| msgid "Media player"
|
|
||||||
#~ msgid "Media Player"
|
#~ msgid "Media Player"
|
||||||
#~ msgstr "Reproductor multimeya"
|
#~ msgstr "Reproductor multimeya"
|
||||||
|
|
||||||
@ -2163,7 +2181,6 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
|
|||||||
#~ msgid "Computer"
|
#~ msgid "Computer"
|
||||||
#~ msgstr "Equipo"
|
#~ msgstr "Equipo"
|
||||||
|
|
||||||
#~| msgid "Unknown"
|
|
||||||
#~ msgctxt "device"
|
#~ msgctxt "device"
|
||||||
#~ msgid "Unknown"
|
#~ msgid "Unknown"
|
||||||
#~ msgstr "Desconoxiu"
|
#~ msgstr "Desconoxiu"
|
||||||
|
1023
po/pt_BR.po
1023
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
86
po/sl.po
86
po/sl.po
@ -9,8 +9,8 @@ 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: 2015-05-10 08:30+0000\n"
|
"POT-Creation-Date: 2015-07-08 08:07+0000\n"
|
||||||
"PO-Revision-Date: 2015-05-10 20:54+0100\n"
|
"PO-Revision-Date: 2015-07-08 15:46+0100\n"
|
||||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||||
"Language: sl\n"
|
"Language: sl\n"
|
||||||
@ -340,17 +340,17 @@ msgstr "Izbor seje"
|
|||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Ali je ni na seznamu?"
|
msgstr "Ali je ni na seznamu?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:840
|
#: ../js/gdm/loginDialog.js:847
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(na primer, uporabnika ali %s)"
|
msgstr "(na primer, uporabnika ali %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:845 ../js/ui/components/networkAgent.js:271
|
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
|
||||||
#: ../js/ui/components/networkAgent.js:289
|
#: ../js/ui/components/networkAgent.js:289
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Uporabniško ime: "
|
msgstr "Uporabniško ime: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1173
|
#: ../js/gdm/loginDialog.js:1180
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Prijavno okno"
|
msgstr "Prijavno okno"
|
||||||
|
|
||||||
@ -443,31 +443,31 @@ msgstr "%B %d %Y, %l∶%M %p"
|
|||||||
msgid "Web Authentication Redirect"
|
msgid "Web Authentication Redirect"
|
||||||
msgstr "Preusmeritev spletnega overjanja"
|
msgstr "Preusmeritev spletnega overjanja"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:788
|
#: ../js/ui/appDisplay.js:789
|
||||||
msgid "Frequently used applications will appear here"
|
msgid "Frequently used applications will appear here"
|
||||||
msgstr "Pogosto uporabljeni programi bodo prikazani tu"
|
msgstr "Pogosto uporabljeni programi bodo prikazani tu"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:908
|
#: ../js/ui/appDisplay.js:909
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Pogosto"
|
msgstr "Pogosto"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:915
|
#: ../js/ui/appDisplay.js:916
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Vse"
|
msgstr "Vse"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1844
|
#: ../js/ui/appDisplay.js:1845
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Novo okno"
|
msgstr "Novo okno"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1872 ../js/ui/dash.js:289
|
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Odstrani iz priljubljenih"
|
msgstr "Odstrani iz priljubljenih"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1878
|
#: ../js/ui/appDisplay.js:1879
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Dodaj med priljubljene"
|
msgstr "Dodaj med priljubljene"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:1888
|
#: ../js/ui/appDisplay.js:1889
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Pokaži besedilo"
|
msgstr "Pokaži besedilo"
|
||||||
|
|
||||||
@ -490,7 +490,7 @@ msgid "Display Settings"
|
|||||||
msgstr "Nastavitve zaslona"
|
msgstr "Nastavitve zaslona"
|
||||||
|
|
||||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
|
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
|
||||||
#: ../js/ui/status/system.js:334
|
#: ../js/ui/status/system.js:357
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Nastavitve"
|
msgstr "Nastavitve"
|
||||||
|
|
||||||
@ -920,7 +920,7 @@ msgstr "Namesti"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Prejmi in namesti “%s” preko povezave na extensions.gnome.org?"
|
msgstr "Prejmi in namesti “%s” preko povezave na extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:718 ../js/ui/status/keyboard.js:713
|
#: ../js/ui/keyboard.js:747 ../js/ui/status/keyboard.js:713
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tipkovnica"
|
msgstr "Tipkovnica"
|
||||||
|
|
||||||
@ -985,7 +985,7 @@ msgstr "Poglej vir"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Spletna stran"
|
msgstr "Spletna stran"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1504
|
#: ../js/ui/messageTray.js:1486
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Podrobnosti sistema"
|
msgstr "Podrobnosti sistema"
|
||||||
|
|
||||||
@ -1027,7 +1027,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Vnos ukaza"
|
msgstr "Vnos ukaza"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:153
|
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Zapri"
|
msgstr "Zapri"
|
||||||
|
|
||||||
@ -1059,19 +1059,19 @@ msgstr[1] "%d novo obvestilo"
|
|||||||
msgstr[2] "%d novi obvestili"
|
msgstr[2] "%d novi obvestili"
|
||||||
msgstr[3] "%d nova obvestila"
|
msgstr[3] "%d nova obvestila"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Zakleni"
|
msgstr "Zakleni"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:668
|
#: ../js/ui/screenShield.js:684
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "Zakleniti je treba zaslon"
|
msgstr "Zakleniti je treba zaslon"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:795 ../js/ui/screenShield.js:1271
|
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Zaklep ni mogoč"
|
msgstr "Zaklep ni mogoč"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:796 ../js/ui/screenShield.js:1272
|
#: ../js/ui/screenShield.js:806 ../js/ui/screenShield.js:1272
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Zaklep je preprečil program"
|
msgstr "Zaklep je preprečil program"
|
||||||
|
|
||||||
@ -1394,23 +1394,23 @@ msgstr "Način letala"
|
|||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "Povezano"
|
msgstr "Povezano"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Preklopi uporabnika"
|
msgstr "Preklopi uporabnika"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:319
|
#: ../js/ui/status/system.js:342
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odjava"
|
msgstr "Odjava"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:338
|
#: ../js/ui/status/system.js:361
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Zaklep položaja"
|
msgstr "Zaklep položaja"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:346
|
#: ../js/ui/status/system.js:369
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Zaustavi"
|
msgstr "Zaustavi"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:372
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Izklop"
|
msgstr "Izklop"
|
||||||
|
|
||||||
@ -1442,27 +1442,27 @@ msgstr "Programi"
|
|||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Poišči"
|
msgstr "Poišči"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:19
|
#: ../js/ui/windowAttentionHandler.js:20
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "“%s” is ready"
|
msgid "“%s” is ready"
|
||||||
msgstr "“%s” storitev je pripravljena"
|
msgstr "“%s” storitev je pripravljena"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:65
|
#: ../js/ui/windowManager.js:63
|
||||||
msgid "Do you want to keep these display settings?"
|
msgid "Do you want to keep these display settings?"
|
||||||
msgstr "Ali želite ohraniti te nastavitve zaslona?"
|
msgstr "Ali želite ohraniti te nastavitve zaslona?"
|
||||||
|
|
||||||
#. 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:84
|
#: ../js/ui/windowManager.js:82
|
||||||
msgid "Revert Settings"
|
msgid "Revert Settings"
|
||||||
msgstr "Povrni nastavitve"
|
msgstr "Povrni nastavitve"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:88
|
#: ../js/ui/windowManager.js:86
|
||||||
msgid "Keep Changes"
|
msgid "Keep Changes"
|
||||||
msgstr "Sledi spremembam"
|
msgstr "Sledi spremembam"
|
||||||
|
|
||||||
#: ../js/ui/windowManager.js:107
|
#: ../js/ui/windowManager.js:105
|
||||||
#, 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"
|
||||||
@ -1473,7 +1473,7 @@ msgstr[3] "Spremembe nastavitev bodo povrnjene v %d sekundah."
|
|||||||
|
|
||||||
#. Translators: This represents the size of a window. The first number is
|
#. Translators: This represents the size of a window. The first number is
|
||||||
#. * the width of the window and the second is the height. */
|
#. * the width of the window and the second is the height. */
|
||||||
#: ../js/ui/windowManager.js:613
|
#: ../js/ui/windowManager.js:604
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d x %d"
|
msgid "%d x %d"
|
||||||
msgstr "%d x %d"
|
msgstr "%d x %d"
|
||||||
@ -1510,27 +1510,35 @@ msgstr "Vedno na vrhu"
|
|||||||
msgid "Always on Visible Workspace"
|
msgid "Always on Visible Workspace"
|
||||||
msgstr "Vedno na dejavni delovni površini"
|
msgstr "Vedno na dejavni delovni površini"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:106
|
#: ../js/ui/windowMenu.js:105
|
||||||
|
msgid "Move to Workspace Left"
|
||||||
|
msgstr "Premakni na delovno površino na levi"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:110
|
||||||
|
msgid "Move to Workspace Right"
|
||||||
|
msgstr "Premakni na delovno površino na desni"
|
||||||
|
|
||||||
|
#: ../js/ui/windowMenu.js:115
|
||||||
msgid "Move to Workspace Up"
|
msgid "Move to Workspace Up"
|
||||||
msgstr "Premakni na zgornjo delovno površino"
|
msgstr "Premakni na zgornjo delovno površino"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:111
|
#: ../js/ui/windowMenu.js:120
|
||||||
msgid "Move to Workspace Down"
|
msgid "Move to Workspace Down"
|
||||||
msgstr "Premakni na spodnjo delovno površino"
|
msgstr "Premakni na spodnjo delovno površino"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:127
|
#: ../js/ui/windowMenu.js:136
|
||||||
msgid "Move to Monitor Up"
|
msgid "Move to Monitor Up"
|
||||||
msgstr "\t"
|
msgstr "\t"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:133
|
#: ../js/ui/windowMenu.js:142
|
||||||
msgid "Move to Monitor Down"
|
msgid "Move to Monitor Down"
|
||||||
msgstr "Premakni na zaslon spodaj"
|
msgstr "Premakni na zaslon spodaj"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:139
|
#: ../js/ui/windowMenu.js:148
|
||||||
msgid "Move to Monitor Left"
|
msgid "Move to Monitor Left"
|
||||||
msgstr "Premakni na zaslon levo"
|
msgstr "Premakni na zaslon levo"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:145
|
#: ../js/ui/windowMenu.js:154
|
||||||
msgid "Move to Monitor Right"
|
msgid "Move to Monitor Right"
|
||||||
msgstr "Premakni na zaslon desno"
|
msgstr "Premakni na zaslon desno"
|
||||||
|
|
||||||
@ -1590,11 +1598,11 @@ msgstr "Neznano"
|
|||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Zaganjanje “%s” je spodletelo"
|
msgstr "Zaganjanje “%s” je spodletelo"
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:714
|
#: ../src/shell-keyring-prompt.c:742
|
||||||
msgid "Passwords do not match."
|
msgid "Passwords do not match."
|
||||||
msgstr "Gesli se ne skladata."
|
msgstr "Gesli se ne skladata."
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:722
|
#: ../src/shell-keyring-prompt.c:750
|
||||||
msgid "Password cannot be blank"
|
msgid "Password cannot be blank"
|
||||||
msgstr "Geslo ne more biti prazno"
|
msgstr "Geslo ne more biti prazno"
|
||||||
|
|
||||||
|
747
po/sr@latin.po
747
po/sr@latin.po
File diff suppressed because it is too large
Load Diff
680
po/zh_CN.po
680
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
546
po/zh_TW.po
546
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -41,8 +41,6 @@
|
|||||||
#define N_(x) x
|
#define N_(x) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate))
|
|
||||||
|
|
||||||
typedef struct _ClientData ClientData;
|
typedef struct _ClientData ClientData;
|
||||||
typedef struct _CalendarSourceData CalendarSourceData;
|
typedef struct _CalendarSourceData CalendarSourceData;
|
||||||
|
|
||||||
@ -66,6 +64,14 @@ struct _CalendarSourceData
|
|||||||
guint loaded : 1;
|
guint loaded : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
|
||||||
|
|
||||||
|
struct _CalendarSources
|
||||||
|
{
|
||||||
|
GObject parent;
|
||||||
|
CalendarSourcesPrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
struct _CalendarSourcesPrivate
|
struct _CalendarSourcesPrivate
|
||||||
{
|
{
|
||||||
ESourceRegistry *registry;
|
ESourceRegistry *registry;
|
||||||
@ -77,8 +83,8 @@ struct _CalendarSourcesPrivate
|
|||||||
CalendarSourceData task_sources;
|
CalendarSourceData task_sources;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void calendar_sources_class_init (CalendarSourcesClass *klass);
|
G_DEFINE_TYPE_WITH_PRIVATE (CalendarSources, calendar_sources, G_TYPE_OBJECT)
|
||||||
static void calendar_sources_init (CalendarSources *sources);
|
|
||||||
static void calendar_sources_finalize (GObject *object);
|
static void calendar_sources_finalize (GObject *object);
|
||||||
|
|
||||||
static void backend_died_cb (EClient *client, CalendarSourceData *source_data);
|
static void backend_died_cb (EClient *client, CalendarSourceData *source_data);
|
||||||
@ -108,34 +114,6 @@ client_data_free (ClientData *data)
|
|||||||
g_slice_free (ClientData, data);
|
g_slice_free (ClientData, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
GType
|
|
||||||
calendar_sources_get_type (void)
|
|
||||||
{
|
|
||||||
static GType sources_type = 0;
|
|
||||||
|
|
||||||
if (!sources_type)
|
|
||||||
{
|
|
||||||
static const GTypeInfo sources_info =
|
|
||||||
{
|
|
||||||
sizeof (CalendarSourcesClass),
|
|
||||||
NULL, /* base_init */
|
|
||||||
NULL, /* base_finalize */
|
|
||||||
(GClassInitFunc) calendar_sources_class_init,
|
|
||||||
NULL, /* class_finalize */
|
|
||||||
NULL, /* class_data */
|
|
||||||
sizeof (CalendarSources),
|
|
||||||
0, /* n_preallocs */
|
|
||||||
(GInstanceInitFunc) calendar_sources_init,
|
|
||||||
};
|
|
||||||
|
|
||||||
sources_type = g_type_register_static (G_TYPE_OBJECT,
|
|
||||||
"CalendarSources",
|
|
||||||
&sources_info, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sources_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
calendar_sources_class_init (CalendarSourcesClass *klass)
|
calendar_sources_class_init (CalendarSourcesClass *klass)
|
||||||
{
|
{
|
||||||
@ -145,14 +123,11 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
|
|||||||
|
|
||||||
gobject_class->finalize = calendar_sources_finalize;
|
gobject_class->finalize = calendar_sources_finalize;
|
||||||
|
|
||||||
g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate));
|
|
||||||
|
|
||||||
signals [APPOINTMENT_SOURCES_CHANGED] =
|
signals [APPOINTMENT_SOURCES_CHANGED] =
|
||||||
g_signal_new ("appointment-sources-changed",
|
g_signal_new ("appointment-sources-changed",
|
||||||
G_TYPE_FROM_CLASS (gobject_class),
|
G_TYPE_FROM_CLASS (gobject_class),
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
G_STRUCT_OFFSET (CalendarSourcesClass,
|
0,
|
||||||
appointment_sources_changed),
|
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@ -163,8 +138,7 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
|
|||||||
g_signal_new ("task-sources-changed",
|
g_signal_new ("task-sources-changed",
|
||||||
G_TYPE_FROM_CLASS (gobject_class),
|
G_TYPE_FROM_CLASS (gobject_class),
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
G_STRUCT_OFFSET (CalendarSourcesClass,
|
0,
|
||||||
task_sources_changed),
|
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@ -179,7 +153,7 @@ calendar_sources_init (CalendarSources *sources)
|
|||||||
GDBusConnection *session_bus;
|
GDBusConnection *session_bus;
|
||||||
GVariant *result;
|
GVariant *result;
|
||||||
|
|
||||||
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
|
sources->priv = calendar_sources_get_instance_private (sources);
|
||||||
|
|
||||||
/* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
|
/* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
|
||||||
(and other library calls that eventually call g_dbus_proxy_new[_sync]())
|
(and other library calls that eventually call g_dbus_proxy_new[_sync]())
|
||||||
@ -201,7 +175,7 @@ calendar_sources_init (CalendarSources *sources)
|
|||||||
"/", "org.freedesktop.DBus",
|
"/", "org.freedesktop.DBus",
|
||||||
"StartServiceByName",
|
"StartServiceByName",
|
||||||
g_variant_new ("(su)",
|
g_variant_new ("(su)",
|
||||||
"org.gnome.evolution.dataserver.Sources4",
|
"org.gnome.evolution.dataserver.Sources5",
|
||||||
0),
|
0),
|
||||||
NULL,
|
NULL,
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
@ -28,33 +28,10 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
|
#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
|
||||||
#define CALENDAR_SOURCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources))
|
G_DECLARE_FINAL_TYPE (CalendarSources, calendar_sources,
|
||||||
#define CALENDAR_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
|
CALENDAR, SOURCES, GObject)
|
||||||
#define CALENDAR_IS_SOURCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES))
|
|
||||||
#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES))
|
|
||||||
#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
|
|
||||||
|
|
||||||
typedef struct _CalendarSources CalendarSources;
|
|
||||||
typedef struct _CalendarSourcesClass CalendarSourcesClass;
|
|
||||||
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
|
|
||||||
|
|
||||||
struct _CalendarSources
|
|
||||||
{
|
|
||||||
GObject parent;
|
|
||||||
CalendarSourcesPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _CalendarSourcesClass
|
|
||||||
{
|
|
||||||
GObjectClass parent_class;
|
|
||||||
|
|
||||||
void (* appointment_sources_changed) (CalendarSources *sources);
|
|
||||||
void (* task_sources_changed) (CalendarSources *sources);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
GType calendar_sources_get_type (void) G_GNUC_CONST;
|
|
||||||
CalendarSources *calendar_sources_get (void);
|
CalendarSources *calendar_sources_get (void);
|
||||||
GList *calendar_sources_get_appointment_clients (CalendarSources *sources);
|
GList *calendar_sources_get_appointment_clients (CalendarSources *sources);
|
||||||
GList *calendar_sources_get_task_clients (CalendarSources *sources);
|
GList *calendar_sources_get_task_clients (CalendarSources *sources);
|
||||||
|
@ -45,8 +45,8 @@ static void gnome_shell_plugin_unminimize (MetaPlugin *plugin,
|
|||||||
static void gnome_shell_plugin_size_change (MetaPlugin *plugin,
|
static void gnome_shell_plugin_size_change (MetaPlugin *plugin,
|
||||||
MetaWindowActor *actor,
|
MetaWindowActor *actor,
|
||||||
MetaSizeChange which_change,
|
MetaSizeChange which_change,
|
||||||
MetaRectangle *old_rect,
|
MetaRectangle *old_frame_rect,
|
||||||
MetaRectangle *new_rect);
|
MetaRectangle *old_buffer_rect);
|
||||||
static void gnome_shell_plugin_map (MetaPlugin *plugin,
|
static void gnome_shell_plugin_map (MetaPlugin *plugin,
|
||||||
MetaWindowActor *actor);
|
MetaWindowActor *actor);
|
||||||
static void gnome_shell_plugin_destroy (MetaPlugin *plugin,
|
static void gnome_shell_plugin_destroy (MetaPlugin *plugin,
|
||||||
|
@ -176,15 +176,15 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
|
|||||||
|
|
||||||
if (subsection)
|
if (subsection)
|
||||||
{
|
{
|
||||||
gboolean could_have_separator;
|
gboolean section_could_have_separator;
|
||||||
|
|
||||||
could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
|
section_could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
|
||||||
|
|
||||||
/* Only pass the parent_model and parent_index in case they may be used to create the separator. */
|
/* Only pass the parent_model and parent_index in case they may be used to create the separator. */
|
||||||
n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
|
n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
|
||||||
could_have_separator,
|
section_could_have_separator,
|
||||||
could_have_separator ? section->model : NULL,
|
section_could_have_separator ? section->model : NULL,
|
||||||
could_have_separator ? i : 0);
|
section_could_have_separator ? i : 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
n_items++;
|
n_items++;
|
||||||
@ -197,11 +197,11 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
|
|||||||
if (should_have_separator > section->has_separator)
|
if (should_have_separator > section->has_separator)
|
||||||
{
|
{
|
||||||
/* Add a separator */
|
/* Add a separator */
|
||||||
GtkMenuTrackerItem *item;
|
GtkMenuTrackerItem *menuitem;
|
||||||
|
|
||||||
item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
|
menuitem = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
|
||||||
(* tracker->insert_func) (item, offset, tracker->user_data);
|
(* tracker->insert_func) (menuitem, offset, tracker->user_data);
|
||||||
g_object_unref (item);
|
g_object_unref (menuitem);
|
||||||
|
|
||||||
section->has_separator = TRUE;
|
section->has_separator = TRUE;
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user