Compare commits

..

5 Commits

Author SHA1 Message Date
Florian Müllner
efba8774b5 messageTray: Stop including an actor with Notifications
We now stopped using notification actors directly for anything, so
we can simplify the Notification class significantly by turning it
into a purely informational object others can use to built their UI
representation from.
2015-03-17 06:17:44 +01:00
Florian Müllner
ff68e268b2 telepathyClient: Provide a custom banner implementation
Since we stopped special-casing chat notifications to use the old
notification actor, we need to provide a notification banner to
maintain the inline chat functionality, so split out the UI from
the existing ChatNotification class.
2015-03-17 06:17:36 +01:00
Florian Müllner
d7ff7e062b messageTray: Always destroy banners when done displaying
Special-casing banners of resident notifications was really a
thinly veiled special case for chat notifications, as those were
still using the old notification actor which coupled the life-time
of the notification to its actor. This is no longer the case, so
we can do the sane thing and destroy banners once they are no
longer needed.
2015-03-17 06:05:34 +01:00
Florian Müllner
87767422e4 Revert "messageTray: Special-case chat notifications to use the old actor"
This was really just a temporary hack to buy us more time to properly port
chat notifications to the new banners ...

This reverts commit cd5318baa7.
2015-03-17 06:05:34 +01:00
Florian Müllner
73c35f8629 telepathyClient: Don't remove body on updates
Passing null as body always meant clearing the existing one. While this
mattered less with the old message tray which used the expanded actor,
the new message list in the calendar uses the unexpanded body. We clearly
don't want that to disappear on icon changes, so pass the existing one.
2015-03-17 06:05:34 +01:00
135 changed files with 21418 additions and 23944 deletions

197
NEWS
View File

@@ -1,200 +1,3 @@
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
======
* Handle touch events in OSK on wayland [Rui; #750287]
* Reinstate left/right movement to window menu [Ron; #751344]
* Allow extensions to disable "Window is ready" notification [Adel; #748846]
* Misc. bug fixes [Watson, Michael, Ray, Rui, Florian, Cosimo; #750465,
#751016, #751517, #750714, #751541, #751599]
Contributors:
Michael Biebl, Cosimo Cecchi, Adel Gadllah, Rui Matos, Florian Müllner,
Ray Strode, Wim Taymans, Ron Yorston, Watson Yuuma Sato
Translations:
Sebastian Rasmussen [sv], Dimitris Spingos [el], Muhammet Kara [tr],
Stas Solovey [ru], Benjamin Steinwender [de], Balázs Úr [hu],
Victor Ibragimov [tg], Dušan Kazik [sk], Pedro Albuquerque [pt]
3.17.2
======
* Remove StTable widget [Florian; #703833]
* Increase visibility of expanders in alt-tab popup [Jakub; #745058]
* Ensure suspend inhibitors are released when VT switched away [Rui; #749228]
* Use iio-sensor-proxy directly for orientation lock [Bastien; #749671]
* Misc. bug fixes [Florian, Lan, Carlos; #749279, #749383, #749529, #749490,
#749742]
Contributors:
Carlos Garnacho, Ting-Wei Lan, Rui Matos, Florian Müllner, Bastien Nocera,
Jakub Steiner
Translations:
Yosef Or Boczko [he], sun [zh_CN], Felipe Braga [pt_BR],
Victor Ibragimov [tg], Gábor Kelemen [hu], Cédric Valmary [oc],
Dušan Kazik [sk], Kjartan Maraas [nb], Bruno Ramalhete [pt],
Matej Urbančič [sl], Daniel Mustieles [es]
3.17.1
======
* Add Display Settings entry to background menu [Meet; #697346]
* Add window menu option to move to different monitor [Isaac; #633994]
* Improve switch style in default/highContrast themes [Jakub; #746294, #747912]
* Make event highlight in calendar more prominent [Jakub; #747715]
* Fix keyboard focus when focusing a notification banner [Florian; #747205]
* Move notification banners below the dateMenu [Meet, Florian; #745910]
* Misc. bug fixes [Mario, Rui; #748338, #748541]
Contributors:
Isaac Ge, Rui Matos, Florian Müllner, Meet Parikh, Mario Sanchez Prada,
Jakub Steiner, Jasper St. Pierre
Translations:
Sveinn í Felli [is], Marek Černocký [cs], laurent Soleil [oc]
3.16.1
======
* gdm: Move long session chooser menus to the side [Florian; #734352]
* Work around background corruption with NVIDIA driver [Rui; #739178]
* Don't allow move-to-workspace for always-sticky windows [Florian; #746782]
* Allow switching workspaces with PgUp/PgDown in overview [Devyani; #742581]
* Bump time PAM messages are displayed [Sarvjeet; #720885]
* Fix "stutter" when moving window past the last workspace [Shivam; #712778]
* Fix blurred text on login screen [Clément; #746912]
* keyboard: Restore whole MRU list after password mode [Rui; #746605]
* Pass event timestamps when activating remote actions [Owen; #747323]
* Fix hung login screen when password is typed too quickly [Shivam; #737586]
* Make on-screen keyboard work for shell chrome on wayland [Rui; #747274]
* Implement reexec_self() for FreeBSD [Ting-Wei; #747788]
* Allow to dismiss resident notifications [Florian; #746860]
* Temporarily reveal legacy tray when icons are added [Florian; #746025]
* Make concealed tray smaller to minimize overlap with apps [Florian; #746787]
* Misc. bug fixes [Florian, Rui, Giovanni; #746323, #746579, #746902, #746364,
#746509, #747636]
Contributors:
Sarvjeet, Giovanni Campagna, Adel Gadllah, Clément Guérin, Devyani Kota,
Ting-Wei Lan, Rui Matos, Shivam Mishra, Florian Müllner, Owen W. Taylor
Translations:
Khaled Hosny [ar], Dušan Kazik [sk], Yuri Myasoedov [ru], Stas Solovey [ru],
Hannie Dumoleyn [nl], Rūdolfs Mazurs [lv]
3.16.0
======
* Revert erroneous login dialog changes [Ray; #740142]
* Improve accessibility of legacy tray [Florian; #746487]
* Fix legacy status icons leaking into other monitors [Florian; #745824]
Contributors:
Florian Müllner, Ray Strode
Translations:
Daniel Martinez [an], Sebastian Rasmussen [sv], Fran Dieguez [gl],
Andika Triwidada [id], Jordi Mas [ca], Kjartan Maraas [nb],
Inaki Larranaga Murgoitio [eu], Muhammet Kara [tr], Khaled Hosny [ar],
Bernd Homuth [de], Jiro Matsuzawa [ja]
3.15.92
=======
* gdm: Fix user list accessibility [Florian; #729603]
* Handle multiline questions in mount operations [Ross; #745713]
* Improve classic theme [Jakub; #745686, #745687]
* Fix ordering of calendar events [Florian; #745988]
* Pick first input source for new windows when per-window [Rui; #746037]
* networkAgent: Show a notification for non-user-initiated password requests
[Giovanni; #660293]
* Fix dismissing calendar events [Florian; #744927]
* Add legacy tray to ctrl-alt-tab popup [Florian; #746022]
* Manage on-screen-keyboard visibility in gnome-shell [Carlos; #745977]
* Add pointer barriers to legacy tray [Cosimo; #746026]
* Use fallback when app icon cannot be resolved [Cosimo; #746219]
* Fix handling of removed smartcard at startup [Ray; #740143]
* gdm: Don't pick a random session for the user [Jasper; #740142]
* Make menu selection behavior consistent with GTK [Florian; #745246]
* gdm: Fix empty user list on user switching [Ray; #719418]
* Misc bug fixes [Florian, Giovanni, Clément, Rui; #745666, #746019, #745861,
#746027, #746223, #737502, #746343, #746288]
Contributors:
Giovanni Campagna, Cosimo Cecchi, Piotr Drąg, Adel Gadllah, Carlos Garnacho,
Clément Guérin, Ross Lagerwall, Rui Matos, Florian Müllner, Jakub Steiner,
Jasper St. Pierre, Ray Strode
Translations:
Piotr Drąg [pl], Changwoo Ryu [ko], Milo Casagrande [it],
Baurzhan Muftakhidinov [kk], Мирослав Николић [sr, sr@latin], Balázs Úr [hu],
IWAI, Masaharu [ja], Daniel Korostil [uk], Aurimas Černius [lt],
Matej Urbančič [sl], Daniel Mustieles [es], Kjartan Maraas [nb],
Victor Ibragimov [tg], Claude Paroz [fr], Jordi Mas [ca], Bernd Homuth [de],
Muhammet Kara [tr], Frédéric Péters [fr], Jiri Grönroos [fi],
Alexander Shopov [bg], Stas Solovey [ru], Trần Ngọc Quân [vi],
Samir Ribic [bs], Dušan Kazik [sk], Enrico Nicoletto [pt_BR],
Marek Černocký [cs], A S Alam [pa], Ask Hjorth Larsen [da],
Tom Tryfonidis [el], Alexandre Franke [fr], Yosef Or Boczko [he],
Chao-Hsiung Liao [zh_TW]
3.15.91 3.15.91
======= =======
* Don't disable all shortcuts while non-panel menus are open [Florian; #745039] * Don't disable all shortcuts while non-panel menus are open [Florian; #745039]

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.17.92],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.15.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -63,8 +63,8 @@ AC_ARG_ENABLE([systemd],
[enable_systemd=$enableval], [enable_systemd=$enableval],
[enable_systemd=auto]) [enable_systemd=auto])
AS_IF([test x$enable_systemd != xno], [ AS_IF([test x$enable_systemd != xno], [
AC_MSG_CHECKING([for libsystemd]) AC_MSG_CHECKING([for libsystemd-journal])
PKG_CHECK_EXISTS([libsystemd], PKG_CHECK_EXISTS([libsystemd-journal],
[have_systemd=yes [have_systemd=yes
AC_DEFINE([HAVE_SYSTEMD], [1], [Define if we have systemd])], AC_DEFINE([HAVE_SYSTEMD], [1], [Define if we have systemd])],
[have_systemd=no]) [have_systemd=no])
@@ -74,13 +74,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=1.45.4 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.17.92 MUTTER_MIN_VERSION=3.15.91
GTK_MIN_VERSION=3.15.0 GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.45.3 GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.17.2 LIBEDATASERVER_MIN_VERSION=3.13.90
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
@@ -106,7 +106,7 @@ SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
polkit-agent-1 >= $POLKIT_MIN_VERSION polkit-agent-1 >= $POLKIT_MIN_VERSION
gcr-base-3 >= $GCR_MIN_VERSION" gcr-base-3 >= $GCR_MIN_VERSION"
if test x$have_systemd = xyes; then if test x$have_systemd = xyes; then
SHARED_PCS="${SHARED_PCS} libsystemd" SHARED_PCS="${SHARED_PCS} libsystemd-journal"
fi fi
PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS) PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)

View File

@@ -32,10 +32,8 @@
<file>summary-counter.svg</file> <file>summary-counter.svg</file>
<file>toggle-off-us.svg</file> <file>toggle-off-us.svg</file>
<file>toggle-off-intl.svg</file> <file>toggle-off-intl.svg</file>
<file>toggle-off-hc.svg</file>
<file>toggle-on-us.svg</file> <file>toggle-on-us.svg</file>
<file>toggle-on-intl.svg</file> <file>toggle-on-intl.svg</file>
<file>toggle-on-hc.svg</file>
<file>ws-switch-arrow-up.png</file> <file>ws-switch-arrow-up.png</file>
<file>ws-switch-arrow-down.png</file> <file>ws-switch-arrow-down.png</file>
</gresource> </gresource>

View File

@@ -51,7 +51,6 @@
</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">

View File

@@ -10,11 +10,11 @@
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24" width="29"
height="24" height="29"
id="svg10621" id="svg10621"
version="1.1" version="1.1"
inkscape:version="0.91 r13725" inkscape:version="0.48.2 r9819"
sodipodi:docname="calendar-today.svg"> sodipodi:docname="calendar-today.svg">
<defs <defs
id="defs10623"> id="defs10623">
@@ -118,6 +118,17 @@
fx="51" fx="51"
fy="30" fy="30"
r="42" /> r="42" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient3113"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@@ -126,23 +137,22 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0" inkscape:pageopacity="0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="8" inkscape:zoom="15.839192"
inkscape:cx="-23.537329" inkscape:cx="20.652108"
inkscape:cy="-31.442864" inkscape:cy="11.839084"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="false" showgrid="true"
fit-margin-top="0" fit-margin-top="0"
fit-margin-left="0" fit-margin-left="0"
fit-margin-right="0" fit-margin-right="0"
fit-margin-bottom="0" fit-margin-bottom="0"
inkscape:window-width="2133" inkscape:window-width="1280"
inkscape:window-height="1241" inkscape:window-height="741"
inkscape:window-x="238" inkscape:window-x="0"
inkscape:window-y="88" inkscape:window-y="27"
inkscape:window-maximized="0" inkscape:window-maximized="1"
borderlayer="true" borderlayer="true">
inkscape:showpageshadow="false">
<inkscape:grid <inkscape:grid
type="xygrid" type="xygrid"
id="grid3109" id="grid3109"
@@ -159,7 +169,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@@ -167,12 +177,28 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(-469.08263,-537.99307)"> transform="translate(-469.08263,-532.99307)">
<circle <path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:0.23756906;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" sodipodi:type="arc"
id="path7305" style="opacity:0.4625;color:#000000;fill:url(#radialGradient3113);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
cx="481.57138" id="path34506-3"
cy="559.4649" sodipodi:cx="51"
r="1.5" /> sodipodi:cy="30"
sodipodi:rx="42"
sodipodi:ry="16"
d="M 9,29.999999 A 42,16 0 0 1 93,30 l -42,0 z"
sodipodi:start="3.1415927"
sodipodi:end="6.2831853"
transform="matrix(0.43692393,0,0,1.3783114,461.29951,517.6437)"
inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-shell-design/mockups/motion/textures/panel.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
style="fill:#ffffff;fill-opacity:0.50196078;stroke-width:0.43599999;stroke-miterlimit:4;stroke-dasharray:none"
id="rect2996"
width="31"
height="3"
x="468.08264"
y="558.99304" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -37,13 +37,14 @@ 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: gray; color: #7f7f7f;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 69, 0.7); background-color: rgba(62, 67, 68, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
@@ -51,46 +52,9 @@ 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 {
@@ -107,8 +71,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: gray; color: #7f7f7f;
border-color: #0e0e0e; border-color: #0d0d0d;
box-shadow: none; } box-shadow: none; }
StEntry StIcon.capslock-warning { StEntry StIcon.capslock-warning {
icon-size: 16px; icon-size: 16px;
@@ -131,10 +95,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: #999999; background-color: #000;
margin: 3px; } margin: 3px; }
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover { StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
background-color: #cccccc; } background-color: #1a1a1a; }
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active { StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
background-color: #215d9c; } background-color: #215d9c; }
@@ -142,7 +106,7 @@ StScrollBar {
.slider { .slider {
height: 1em; height: 1em;
-slider-height: 0.3em; -slider-height: 0.3em;
-slider-background-color: #0e0e0e; -slider-background-color: #0d0d0d;
-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;
@@ -196,12 +160,11 @@ StScrollBar {
background-color: white; } background-color: white; }
.modal-dialog { .modal-dialog {
border-radius: 9px; border-radius: 5px;
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: 3px solid rgba(238, 238, 236, 0.5);
.modal-dialog .modal-dialog-content-box { padding: 24px; }
padding: 24px; }
.modal-dialog .run-dialog-entry { .modal-dialog .run-dialog-entry {
width: 20em; width: 20em;
margin-bottom: 6px; } margin-bottom: 6px; }
@@ -216,6 +179,10 @@ 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 {
@@ -426,7 +393,7 @@ StScrollBar {
background-color: black; background-color: black;
box-shadow: inset 0 1px 0px #0d0d0d; box-shadow: inset 0 1px 0px #0d0d0d;
font-weight: bold; } font-weight: bold; }
.popup-menu .popup-menu-item.selected { .popup-menu .popup-menu-item:hover, .popup-menu .popup-menu-item:focus {
background-color: rgba(255, 255, 255, 0.1); background-color: rgba(255, 255, 255, 0.1);
color: #fff; } color: #fff; }
.popup-menu .popup-menu-item:active { .popup-menu .popup-menu-item:active {
@@ -434,6 +401,8 @@ StScrollBar {
color: #ffffff; } color: #ffffff; }
.popup-menu .popup-menu-item:insensitive { .popup-menu .popup-menu-item:insensitive {
color: rgba(255, 255, 255, 0.5); } color: rgba(255, 255, 255, 0.5); }
.popup-menu .active {
background-color: #215d9c; }
.popup-menu .popup-inactive-menu-item { .popup-menu .popup-inactive-menu-item {
color: #fff; } color: #fff; }
.popup-menu .popup-inactive-menu-item:insensitive { .popup-menu .popup-inactive-menu-item:insensitive {
@@ -444,7 +413,7 @@ StScrollBar {
.popup-menu-ornament { .popup-menu-ornament {
text-align: right; text-align: right;
width: 1.2em; } width: 1em; }
.popup-menu-boxpointer, .popup-menu-boxpointer,
.candidate-popup-boxpointer { .candidate-popup-boxpointer {
@@ -521,9 +490,10 @@ StScrollBar {
.switcher-arrow { .switcher-arrow {
border-color: transparent; border-color: transparent;
color: rgba(255, 255, 255, 0.8); } color: black; }
.switcher-arrow:highlighted {
color: #fff; } .switcher-arrow:highlighted {
color: #fff; }
.input-source-switcher-symbol { .input-source-switcher-symbol {
font-size: 34pt; font-size: 34pt;
@@ -593,7 +563,7 @@ StScrollBar {
-panel-corner-border-color: transparent; } -panel-corner-border-color: transparent; }
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus { #panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
-panel-corner-border-color: #256ab1; } -panel-corner-border-color: #256ab1; }
#panel .panel-corner.lock-screen, #panel .panel-corner.login-screen, #panel .panel-corner.unlock-screen { #panel .panel-corner.lock-screen, #panel .panel-corner.login-screen, #panel .panel-cornerunlock-screen {
-panel-corner-radius: 0; -panel-corner-radius: 0;
-panel-corner-background-color: transparent; -panel-corner-background-color: transparent;
-panel-corner-border-color: transparent; } -panel-corner-border-color: transparent; }
@@ -735,16 +705,15 @@ StScrollBar {
border-left-width: 1px; } border-left-width: 1px; }
.calendar-nonwork-day { .calendar-nonwork-day {
color: gray; } color: #7f7f7f; }
.calendar-today { .calendar-today {
font-weight: bold; font-weight: bold;
border: 1px solid rgba(0, 0, 0, 0.5); } border: 1px solid rgba(0, 0, 0, 0.5); }
.calendar-day-with-events { .calendar-day-with-events {
color: white; color: #f2f2f2;
font-weight: bold; font-weight: bold; }
background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg"); }
.calendar-other-month-day { .calendar-other-month-day {
color: rgba(255, 255, 255, 0.15); color: rgba(255, 255, 255, 0.15);
@@ -787,12 +756,7 @@ StScrollBar {
padding: 8px 8px 8px 0px; } padding: 8px 8px 8px 0px; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
icon-size: 32px; } icon-size: 48px; }
.message-secondary-bin:ltr {
padding-left: 8px; }
.message-secondary-bin:rtl {
padding-right: 8px; }
.message-secondary-bin { .message-secondary-bin {
color: #999999; } color: #999999; }
@@ -801,20 +765,14 @@ 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.user-icon { .system-switch-user-submenu-icon {
icon-size: 20px; icon-size: 24px;
padding: 0 2px; } border: 1px solid rgba(255, 255, 255, 0.4); }
.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");
@@ -878,8 +836,7 @@ 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; }
@@ -1061,7 +1018,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: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.app-view-control:first-child { .app-view-control:first-child {
@@ -1380,9 +1337,10 @@ 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);
@@ -1394,7 +1352,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: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.keyboard-key:grayed { .keyboard-key:grayed {
@@ -1487,13 +1445,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: inset 0 0 black; box-shadow: none;
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: gray; color: #7f7f7f;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 69, 0.7); background-color: rgba(62, 67, 68, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
@@ -1740,11 +1698,3 @@ StScrollBar {
stage { stage {
-st-icon-style: symbolic; } -st-icon-style: symbolic; }
.toggle-switch {
width: 48px; }
.toggle-switch-us, .toggle-switch-intl {
background-image: url("resource:///org/gnome/shell/theme/toggle-off-hc.svg"); }
.toggle-switch-us:checked, .toggle-switch-intl:checked {
background-image: url("resource:///org/gnome/shell/theme/toggle-on-hc.svg"); }

View File

@@ -6,9 +6,3 @@
stage { stage {
-st-icon-style: symbolic; -st-icon-style: symbolic;
} }
.toggle-switch { width: 48px; }
.toggle-switch-us, .toggle-switch-intl {
background-image: url("resource:///org/gnome/shell/theme/toggle-off-hc.svg");
&:checked { background-image: url("resource:///org/gnome/shell/theme/toggle-on-hc.svg"); }
}

View File

@@ -37,13 +37,14 @@ 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: #949796; color: #939695;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 72, 73, 0.7); background-color: rgba(66, 71, 73, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
@@ -51,46 +52,9 @@ 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 {
@@ -107,8 +71,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: #949796; color: #939695;
border-color: #333636; border-color: #323636;
box-shadow: none; } box-shadow: none; }
StEntry StIcon.capslock-warning { StEntry StIcon.capslock-warning {
icon-size: 16px; icon-size: 16px;
@@ -131,10 +95,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: #a6a8a7; background-color: #393f3f;
margin: 3px; } margin: 3px; }
StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover { StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
background-color: #cacbc9; } background-color: #515a5a; }
StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active { StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
background-color: #215d9c; } background-color: #215d9c; }
@@ -142,7 +106,7 @@ StScrollBar {
.slider { .slider {
height: 1em; height: 1em;
-slider-height: 0.3em; -slider-height: 0.3em;
-slider-background-color: #333636; -slider-background-color: #323636;
-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;
@@ -196,12 +160,11 @@ StScrollBar {
background-color: white; } background-color: white; }
.modal-dialog { .modal-dialog {
border-radius: 9px; border-radius: 5px;
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: 3px solid rgba(238, 238, 236, 0.5);
.modal-dialog .modal-dialog-content-box { padding: 24px; }
padding: 24px; }
.modal-dialog .run-dialog-entry { .modal-dialog .run-dialog-entry {
width: 20em; width: 20em;
margin-bottom: 6px; } margin-bottom: 6px; }
@@ -216,6 +179,10 @@ 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 {
@@ -426,7 +393,7 @@ StScrollBar {
background-color: #343a3a; background-color: #343a3a;
box-shadow: inset 0 1px 0px #282c2c; box-shadow: inset 0 1px 0px #282c2c;
font-weight: bold; } font-weight: bold; }
.popup-menu .popup-menu-item.selected { .popup-menu .popup-menu-item:hover, .popup-menu .popup-menu-item:focus {
background-color: rgba(238, 238, 236, 0.1); background-color: rgba(238, 238, 236, 0.1);
color: #eeeeec; } color: #eeeeec; }
.popup-menu .popup-menu-item:active { .popup-menu .popup-menu-item:active {
@@ -434,6 +401,8 @@ StScrollBar {
color: #ffffff; } color: #ffffff; }
.popup-menu .popup-menu-item:insensitive { .popup-menu .popup-menu-item:insensitive {
color: rgba(238, 238, 236, 0.5); } color: rgba(238, 238, 236, 0.5); }
.popup-menu .active {
background-color: #215d9c; }
.popup-menu .popup-inactive-menu-item { .popup-menu .popup-inactive-menu-item {
color: #eeeeec; } color: #eeeeec; }
.popup-menu .popup-inactive-menu-item:insensitive { .popup-menu .popup-inactive-menu-item:insensitive {
@@ -444,7 +413,7 @@ StScrollBar {
.popup-menu-ornament { .popup-menu-ornament {
text-align: right; text-align: right;
width: 1.2em; } width: 1em; }
.popup-menu-boxpointer, .popup-menu-boxpointer,
.candidate-popup-boxpointer { .candidate-popup-boxpointer {
@@ -521,9 +490,10 @@ StScrollBar {
.switcher-arrow { .switcher-arrow {
border-color: transparent; border-color: transparent;
color: rgba(238, 238, 236, 0.8); } color: #1c1f1f; }
.switcher-arrow:highlighted {
color: #eeeeec; } .switcher-arrow:highlighted {
color: #eeeeec; }
.input-source-switcher-symbol { .input-source-switcher-symbol {
font-size: 34pt; font-size: 34pt;
@@ -593,7 +563,7 @@ StScrollBar {
-panel-corner-border-color: transparent; } -panel-corner-border-color: transparent; }
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus { #panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
-panel-corner-border-color: #256ab1; } -panel-corner-border-color: #256ab1; }
#panel .panel-corner.lock-screen, #panel .panel-corner.login-screen, #panel .panel-corner.unlock-screen { #panel .panel-corner.lock-screen, #panel .panel-corner.login-screen, #panel .panel-cornerunlock-screen {
-panel-corner-radius: 0; -panel-corner-radius: 0;
-panel-corner-background-color: transparent; -panel-corner-background-color: transparent;
-panel-corner-border-color: transparent; } -panel-corner-border-color: transparent; }
@@ -735,16 +705,15 @@ StScrollBar {
border-left-width: 1px; } border-left-width: 1px; }
.calendar-nonwork-day { .calendar-nonwork-day {
color: #949796; } color: #939695; }
.calendar-today { .calendar-today {
font-weight: bold; font-weight: bold;
border: 1px solid rgba(28, 31, 31, 0.5); } border: 1px solid rgba(28, 31, 31, 0.5); }
.calendar-day-with-events { .calendar-day-with-events {
color: white; color: #e2e2df;
font-weight: bold; font-weight: bold; }
background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg"); }
.calendar-other-month-day { .calendar-other-month-day {
color: rgba(238, 238, 236, 0.15); color: rgba(238, 238, 236, 0.15);
@@ -787,12 +756,7 @@ StScrollBar {
padding: 8px 8px 8px 0px; } padding: 8px 8px 8px 0px; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
icon-size: 32px; } icon-size: 48px; }
.message-secondary-bin:ltr {
padding-left: 8px; }
.message-secondary-bin:rtl {
padding-right: 8px; }
.message-secondary-bin { .message-secondary-bin {
color: #8e8e80; } color: #8e8e80; }
@@ -801,20 +765,14 @@ 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.user-icon { .system-switch-user-submenu-icon {
icon-size: 20px; icon-size: 24px;
padding: 0 2px; } border: 1px solid rgba(238, 238, 236, 0.4); }
.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");
@@ -823,7 +781,7 @@ StScrollBar {
color: transparent; } color: transparent; }
.aggregate-menu { .aggregate-menu {
width: 280px; } width: 360px; }
.aggregate-menu .popup-menu-icon { .aggregate-menu .popup-menu-icon {
padding: 0 4px; } padding: 0 4px; }
@@ -878,8 +836,7 @@ 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; }
@@ -1061,7 +1018,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: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.app-view-control:first-child { .app-view-control:first-child {
@@ -1380,9 +1337,10 @@ 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);
@@ -1394,7 +1352,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: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.keyboard-key:grayed { .keyboard-key:grayed {
@@ -1487,13 +1445,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: inset 0 0 black; box-shadow: none;
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: #949796; color: #939695;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 72, 73, 0.7); background-color: rgba(66, 71, 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: 98 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,133 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="22"
id="svg2857"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="toggle-off-hc.svg">
<defs
id="defs2859">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2865" />
<inkscape:perspective
id="perspective2843"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:path-effect
effect="spiro"
id="path-effect77541-4"
is_visible="true" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-6.1820581"
inkscape:cy="-16.463788"
inkscape:document-units="px"
inkscape:current-layer="g37994"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1364"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="true">
<inkscape:grid
type="xygrid"
id="grid12954"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata2862">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-444.64286,-781.36218)">
<g
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
id="g37994">
<g
transform="matrix(1.5323214,0,0,1.2413968,-324.76058,489.69039)"
id="toggle-off"
inkscape:label="#g8477">
<circle
cy="1033.993"
cx="571.95966"
id="path8444"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
r="7" />
<rect
ry="2.0108337"
rx="1.9562569"
y="1031.9885"
x="565.0083"
height="4.0216675"
width="34.850178"
id="rect8461"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
</g>
<g
transform="matrix(1.5323214,0,0,1.2413968,-324.85635,491.16456)"
id="toggle-on"
inkscape:label="#g8481">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect8475"
width="34.850178"
height="4.0216675"
x="565.0083"
y="1070.9279"
rx="1.9562569"
ry="2.0108337" />
<circle
transform="scale(-1,1)"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="circle8463"
cx="-591.0213"
cy="1072.9402"
r="9" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="22"
id="svg2857"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="toggle-on-hc.svg">
<defs
id="defs2859">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2865" />
<inkscape:perspective
id="perspective2843"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:path-effect
effect="spiro"
id="path-effect77541-4"
is_visible="true" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-222.95215"
inkscape:cy="3.9378433"
inkscape:document-units="px"
inkscape:current-layer="g37994"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1364"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="true">
<inkscape:grid
type="xygrid"
id="grid12954"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata2862">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-444.64286,-781.36218)">
<g
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
id="g37994">
<g
transform="matrix(1.5323214,0,0,1.2413968,-324.85635,441.50868)"
id="toggle-on"
inkscape:label="#g8481">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect8475"
width="34.850178"
height="4.0216675"
x="565.0083"
y="1070.9279"
rx="1.9562569"
ry="2.0108337" />
<circle
transform="scale(-1,1)"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="circle8463"
cx="-591.0213"
cy="1072.9402"
r="9" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -14,7 +14,7 @@
height="22" height="22"
id="svg2857" id="svg2857"
version="1.1" version="1.1"
inkscape:version="0.91 r13725" inkscape:version="0.48.5 r10040"
sodipodi:docname="toggle-on-intl.svg"> sodipodi:docname="toggle-on-intl.svg">
<defs <defs
id="defs2859"> id="defs2859">
@@ -52,7 +52,7 @@
<stop <stop
id="stop77465" id="stop77465"
offset="1" offset="1"
style="stop-color:#205b9a;stop-opacity:1" /> style="stop-color:#204a87;stop-opacity:1" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
@@ -88,14 +88,14 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="1" inkscape:pageopacity="1"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1" inkscape:zoom="32"
inkscape:cx="37.410841" inkscape:cx="17.255148"
inkscape:cy="16.009314" inkscape:cy="8.9252639"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="g37994" inkscape:current-layer="g37994"
showgrid="false" showgrid="true"
inkscape:window-width="2560" inkscape:window-width="2560"
inkscape:window-height="1376" inkscape:window-height="1375"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="27" inkscape:window-y="27"
inkscape:window-maximized="1" inkscape:window-maximized="1"

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@@ -14,7 +14,7 @@
height="22" height="22"
id="svg2857" id="svg2857"
version="1.1" version="1.1"
inkscape:version="0.91 r13725" inkscape:version="0.48.5 r10040"
sodipodi:docname="toggle-on-us.svg"> sodipodi:docname="toggle-on-us.svg">
<defs <defs
id="defs2859"> id="defs2859">
@@ -32,6 +32,28 @@
inkscape:vp_y="0 : 1000 : 0" inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" /> sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient77461"
id="linearGradient77551"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
x1="1164.7644"
y1="962.93695"
x2="1164.7644"
y2="970.51404" />
<linearGradient
id="linearGradient77461"
inkscape:collect="always">
<stop
id="stop77463"
offset="0"
style="stop-color:#182f4c;stop-opacity:1" />
<stop
id="stop77465"
offset="1"
style="stop-color:#204a87;stop-opacity:1" />
</linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient76469-7-7-4" xlink:href="#linearGradient76469-7-7-4"
@@ -58,38 +80,6 @@
effect="spiro" effect="spiro"
id="path-effect77541-4" id="path-effect77541-4"
is_visible="true" /> is_visible="true" />
<linearGradient
id="linearGradient77461-1"
inkscape:collect="always">
<stop
id="stop77463-1"
offset="0"
style="stop-color:#182f4c;stop-opacity:1" />
<stop
id="stop77465-4"
offset="1"
style="stop-color:#205b9a;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient77461-1"
id="linearGradient77551-6-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.8527367,0,0,0.80554422,-969.41608,-778.00299)"
x1="1164.7644"
y1="962.93695"
x2="1164.7644"
y2="970.51404" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient77461-1"
id="linearGradient11198"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-1066.3709,794.25325)"
x1="1322.5831"
y1="-312.51855"
x2="1322.5831"
y2="-306.53461" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@@ -99,13 +89,13 @@
inkscape:pageopacity="1" inkscape:pageopacity="1"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1" inkscape:zoom="1"
inkscape:cx="-26.798898" inkscape:cx="33.380898"
inkscape:cy="5.3753009" inkscape:cy="6.9658271"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="g37994" inkscape:current-layer="g37994"
showgrid="false" showgrid="false"
inkscape:window-width="2560" inkscape:window-width="2560"
inkscape:window-height="1376" inkscape:window-height="1375"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="27" inkscape:window-y="27"
inkscape:window-maximized="1" inkscape:window-maximized="1"
@@ -162,7 +152,7 @@
height="25" height="25"
width="98" width="98"
id="rect38000" id="rect38000"
style="color:#000000;fill:url(#linearGradient11198);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" /> style="color:#000000;fill:url(#linearGradient77551);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
</g> </g>
<g <g
transform="translate(2.0625,-2)" transform="translate(2.0625,-2)"

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -35,6 +35,7 @@
<xi:include href="xml/st-bin.xml"/> <xi:include href="xml/st-bin.xml"/>
<xi:include href="xml/st-box-layout.xml"/> <xi:include href="xml/st-box-layout.xml"/>
<xi:include href="xml/st-scroll-view.xml"/> <xi:include href="xml/st-scroll-view.xml"/>
<xi:include href="xml/st-table.xml"/>
</chapter> </chapter>
<chapter id="styling"> <chapter id="styling">

View File

@@ -54,6 +54,7 @@ const Application = new Lang.Class({
this._startupUuid = null; this._startupUuid = null;
this._loaded = false; this._loaded = false;
this._skipMainWindow = false; this._skipMainWindow = false;
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
}, },
_extensionAvailable: function(uuid) { _extensionAvailable: function(uuid) {

View File

@@ -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 = 16; const DEFAULT_BUTTON_WELL_ICON_SIZE = 24;
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;
@@ -194,15 +194,17 @@ const AuthPrompt = new Lang.Class({
}, },
_onAskQuestion: function(verifier, serviceName, question, passwordChar) { _onAskQuestion: function(verifier, serviceName, question, passwordChar) {
if (this._preemptiveAnswer) {
if (this._queryingService)
this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
this._preemptiveAnswer = null;
return;
}
if (this._queryingService) if (this._queryingService)
this.clear(); this.clear();
this._queryingService = serviceName; this._queryingService = serviceName;
if (this._preemptiveAnswer) {
this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
this._preemptiveAnswer = null;
return;
}
this.setPasswordChar(passwordChar); this.setPasswordChar(passwordChar);
this.setQuestion(question); this.setQuestion(question);
@@ -258,7 +260,6 @@ 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;
}, },
@@ -282,12 +283,6 @@ 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;
@@ -297,11 +292,6 @@ 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,
@@ -310,7 +300,7 @@ const AuthPrompt = new Lang.Class({
transition: 'linear', transition: 'linear',
onCompleteScope: this, onCompleteScope: this,
onComplete: function() { onComplete: function() {
if (wasSpinner) { if (isSpinner) {
if (this._spinner) if (this._spinner)
this._spinner.stop(); this._spinner.stop();
} }
@@ -413,7 +403,7 @@ const AuthPrompt = new Lang.Class({
}, },
updateSensitivity: function(sensitive) { updateSensitivity: function(sensitive) {
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0); this._updateNextButtonSensitivity(sensitive);
this._entry.reactive = sensitive; this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive; this._entry.clutter_text.editable = sensitive;
}, },
@@ -444,9 +434,8 @@ 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 (this._userVerifier) if (oldStatus == AuthPromptStatus.VERIFYING)
this._userVerifier.cancel(); this._userVerifier.cancel();
this._queryingService = null; this._queryingService = null;
@@ -501,7 +490,6 @@ 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;
} }
@@ -509,13 +497,12 @@ 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.VERIFICATION_SUCCEEDED) { if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
return; return;
} }
this.reset(); this.reset();

View File

@@ -49,7 +49,6 @@ const _FADE_ANIMATION_TIME = 0.25;
const _SCROLL_ANIMATION_TIME = 0.5; const _SCROLL_ANIMATION_TIME = 0.5;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0; const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_HEIGHT = 48; const _LOGO_ICON_HEIGHT = 48;
const _MAX_BOTTOM_MENU_ITEMS = 5;
const UserListItem = new Lang.Class({ const UserListItem = new Lang.Class({
Name: 'UserListItem', Name: 'UserListItem',
@@ -284,16 +283,7 @@ const SessionMenuButton = new Lang.Class({
this.actor = new St.Bin({ child: this._button }); this.actor = new St.Bin({ child: this._button });
let side = St.Side.TOP; this._menu = new PopupMenu.PopupMenu(this._button, 0, St.Side.TOP);
let align = 0;
if (Gdm.get_session_ids().length > _MAX_BOTTOM_MENU_ITEMS) {
if (this.actor.text_direction == Clutter.TextDirection.RTL)
side = St.Side.RIGHT;
else
side = St.Side.LEFT;
align = 0.5;
}
this._menu = new PopupMenu.PopupMenu(this._button, align, side);
Main.uiGroup.add_actor(this._menu.actor); Main.uiGroup.add_actor(this._menu.actor);
this._menu.actor.hide(); this._menu.actor.hide();
@@ -333,13 +323,15 @@ const SessionMenuButton = new Lang.Class({
} }
}, },
setActiveSession: function(sessionId) { activeSessionChanged: function(sessionId) {
if (sessionId == this._activeSessionId) if (sessionId == this._activeSessionId)
return; return;
this._activeSessionId = sessionId; this._activeSessionId = sessionId;
this._updateOrnament(); this._updateOrnament();
},
setActiveSession: function(sessionId) {
this.emit('session-activated', this._activeSessionId); this.emit('session-activated', this._activeSessionId);
}, },
@@ -364,9 +356,6 @@ const SessionMenuButton = new Lang.Class({
this._menu.addMenuItem(item); this._menu.addMenuItem(item);
this._items[id] = item; this._items[id] = item;
if (!this._activeSessionId)
this.setActiveSession(id);
item.connect('activate', Lang.bind(this, function() { item.connect('activate', Lang.bind(this, function() {
this.setActiveSession(id); this.setActiveSession(id);
})); }));
@@ -506,7 +495,7 @@ const LoginDialog = new Lang.Class({
let [minWidth, minHeight, natWidth, natHeight] = this._bannerView.get_preferred_size(); let [minWidth, minHeight, natWidth, natHeight] = this._bannerView.get_preferred_size();
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
actorBox.x1 = Math.floor(centerX - natWidth / 2); actorBox.x1 = centerX - natWidth / 2;
actorBox.y1 = dialogBox.y1 + Main.layoutManager.panelBox.height; actorBox.y1 = dialogBox.y1 + Main.layoutManager.panelBox.height;
actorBox.x2 = actorBox.x1 + natWidth; actorBox.x2 = actorBox.x1 + natWidth;
actorBox.y2 = actorBox.y1 + natHeight; actorBox.y2 = actorBox.y1 + natHeight;
@@ -520,7 +509,7 @@ const LoginDialog = new Lang.Class({
let [minWidth, minHeight, natWidth, natHeight] = this._logoBin.get_preferred_size(); let [minWidth, minHeight, natWidth, natHeight] = this._logoBin.get_preferred_size();
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
actorBox.x1 = Math.floor(centerX - natWidth / 2); actorBox.x1 = centerX - natWidth / 2;
actorBox.y1 = dialogBox.y2 - natHeight; actorBox.y1 = dialogBox.y2 - natHeight;
actorBox.x2 = actorBox.x1 + natWidth; actorBox.x2 = actorBox.x1 + natWidth;
actorBox.y2 = actorBox.y1 + natHeight; actorBox.y2 = actorBox.y1 + natHeight;
@@ -535,11 +524,8 @@ 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); actorBox.x1 = centerX - natWidth / 2;
natHeight = Math.min(natHeight, dialogBox.y2 - dialogBox.y1); actorBox.y1 = centerY - natHeight / 2;
actorBox.x1 = Math.floor(centerX - natWidth / 2);
actorBox.y1 = Math.floor(centerY - natHeight / 2);
actorBox.x2 = actorBox.x1 + natWidth; actorBox.x2 = actorBox.x1 + natWidth;
actorBox.y2 = actorBox.y1 + natHeight; actorBox.y2 = actorBox.y1 + natHeight;
@@ -587,21 +573,14 @@ const LoginDialog = new Lang.Class({
// try a different layout, or if we have what extra space we // try a different layout, or if we have what extra space we
// can hand out // can hand out
if (bannerAllocation) { if (bannerAllocation) {
let bannerSpace; let leftOverYSpace = dialogHeight - bannerHeight - authPromptHeight - logoHeight;
if (authPromptAllocation)
bannerSpace = authPromptAllocation.y1 - bannerAllocation.y1;
else
bannerSpace = 0;
let leftOverYSpace = bannerSpace - bannerHeight;
if (leftOverYSpace > 0) { if (leftOverYSpace > 0) {
// First figure out how much left over space is up top // First figure out how much left over space is up top
let leftOverTopSpace = leftOverYSpace / 2; let leftOverTopSpace = leftOverYSpace / 2;
// Then, shift the banner into the middle of that extra space // Then, shift the banner into the middle of that extra space
let yShift = Math.floor(leftOverTopSpace / 2); let yShift = leftOverTopSpace / 2;
bannerAllocation.y1 += yShift; bannerAllocation.y1 += yShift;
bannerAllocation.y2 += yShift; bannerAllocation.y2 += yShift;
@@ -627,8 +606,8 @@ const LoginDialog = new Lang.Class({
let centerGap = wideSpacing / 8; let centerGap = wideSpacing / 8;
// place the banner along the left edge of the center margin // place the banner along the left edge of the center margin
bannerAllocation.x2 = Math.floor(centerX - centerGap / 2); bannerAllocation.x2 = centerX - centerGap / 2;
bannerAllocation.x1 = Math.floor(bannerAllocation.x2 - wideBannerWidth); bannerAllocation.x1 = bannerAllocation.x2 - wideBannerWidth;
// figure out how tall it would like to be and try to accomodate // figure out how tall it would like to be and try to accomodate
// but don't let it get too close to the logo // but don't let it get too close to the logo
@@ -636,11 +615,11 @@ const LoginDialog = new Lang.Class({
let maxWideHeight = dialogHeight - 3 * logoHeight; let maxWideHeight = dialogHeight - 3 * logoHeight;
wideBannerHeight = Math.min(maxWideHeight, wideBannerHeight); wideBannerHeight = Math.min(maxWideHeight, wideBannerHeight);
bannerAllocation.y1 = Math.floor(centerY - wideBannerHeight / 2); bannerAllocation.y1 = centerY - wideBannerHeight / 2;
bannerAllocation.y2 = bannerAllocation.y1 + wideBannerHeight; bannerAllocation.y2 = bannerAllocation.y1 + wideBannerHeight;
// place the auth prompt along the right edge of the center margin // place the auth prompt along the right edge of the center margin
authPromptAllocation.x1 = Math.floor(centerX + centerGap / 2); authPromptAllocation.x1 = centerX + centerGap / 2;
authPromptAllocation.x2 = authPromptAllocation.x1 + authPromptWidth; authPromptAllocation.x2 = authPromptAllocation.x1 + authPromptWidth;
} else { } else {
// If we aren't going to do a wide view, then we need to limit // If we aren't going to do a wide view, then we need to limit
@@ -650,7 +629,7 @@ const LoginDialog = new Lang.Class({
leftOverYSpace += bannerHeight; leftOverYSpace += bannerHeight;
// Then figure out how much of that space is up top // Then figure out how much of that space is up top
let availableTopSpace = Math.floor(leftOverYSpace / 2); let availableTopSpace = leftOverYSpace / 2;
// Then give all of that space to the banner // Then give all of that space to the banner
bannerAllocation.y2 = bannerAllocation.y1 + availableTopSpace; bannerAllocation.y2 = bannerAllocation.y1 + availableTopSpace;
@@ -661,7 +640,7 @@ const LoginDialog = new Lang.Class({
let leftOverYSpace = dialogHeight - userSelectionHeight - logoHeight; let leftOverYSpace = dialogHeight - userSelectionHeight - logoHeight;
if (leftOverYSpace > 0) { if (leftOverYSpace > 0) {
let topExpansion = Math.floor(leftOverYSpace / 2); let topExpansion = leftOverYSpace / 2;
let bottomExpansion = topExpansion; let bottomExpansion = topExpansion;
userSelectionAllocation.y1 -= topExpansion; userSelectionAllocation.y1 -= topExpansion;
@@ -811,7 +790,7 @@ const LoginDialog = new Lang.Class({
}, },
_onDefaultSessionChanged: function(client, sessionId) { _onDefaultSessionChanged: function(client, sessionId) {
this._sessionMenuButton.setActiveSession(sessionId); this._sessionMenuButton.activeSessionChanged(sessionId);
}, },
_shouldShowSessionMenuButton: function() { _shouldShowSessionMenuButton: function() {
@@ -877,7 +856,7 @@ const LoginDialog = new Lang.Class({
}, },
_loginScreenSessionActivated: function() { _loginScreenSessionActivated: function() {
if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING) if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED)
return; return;
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
@@ -894,8 +873,7 @@ const LoginDialog = new Lang.Class({
}, },
onUpdateScope: this, onUpdateScope: this,
onComplete: function() { onComplete: function() {
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING) this._authPrompt.reset();
this._authPrompt.reset();
}, },
onCompleteScope: this }); onCompleteScope: this });
}, },
@@ -1108,11 +1086,18 @@ const LoginDialog = new Lang.Class({
}, },
_onUserListActivated: function(activatedItem) { _onUserListActivated: function(activatedItem) {
let tasks = [function() {
return GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
},
function() {
this._setUserListExpanded(false);
}];
this._user = activatedItem.user; this._user = activatedItem.user;
this._updateCancelButton(); this._updateCancelButton();
let batch = new Batch.ConcurrentBatch(this, [GdmUtil.cloneAndFadeOutActor(this._userSelectionBox), let batch = new Batch.ConcurrentBatch(this, [new Batch.ConsecutiveBatch(this, tasks),
this._beginVerificationForItem(activatedItem)]); this._beginVerificationForItem(activatedItem)]);
batch.run(); batch.run();
}, },

View File

@@ -35,8 +35,8 @@ const ALLOWED_FAILURES_KEY = 'allowed-failures';
const LOGO_KEY = 'logo'; const LOGO_KEY = 'logo';
const DISABLE_USER_LIST_KEY = 'disable-user-list'; const DISABLE_USER_LIST_KEY = 'disable-user-list';
// Give user 48ms to read each character of a PAM message // Give user 16ms to read each character of a PAM message
const USER_READ_TIME = 48 const USER_READ_TIME = 16
const MessageType = { const MessageType = {
NONE: 0, NONE: 0,

View File

@@ -134,7 +134,7 @@ const LoginManagerSystemd = new Lang.Class({
if (error) if (error)
asyncCallback(false); asyncCallback(false);
else else
asyncCallback(result[0] != 'no' && result[0] != 'na'); asyncCallback(result[0] != 'no');
}); });
}, },

View File

@@ -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 = 14; const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',

View File

@@ -366,6 +366,8 @@ const AllView = new Lang.Class({
Extends: BaseAppView, Extends: BaseAppView,
_init: function() { _init: function() {
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
this.parent({ usePagination: true }, null); this.parent({ usePagination: true }, null);
this._scrollView = new St.ScrollView({ style_class: 'all-apps', this._scrollView = new St.ScrollView({ style_class: 'all-apps',
x_expand: true, x_expand: true,
@@ -500,11 +502,6 @@ 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();
@@ -528,7 +525,7 @@ const AllView = new Lang.Class({
// at least on single-monitor setups. // at least on single-monitor setups.
// This also disables drag-to-launch on multi-monitor setups, // This also disables drag-to-launch on multi-monitor setups,
// but we hope that is not used much. // but we hope that is not used much.
let favoritesWritable = global.settings.is_writable('favorite-apps'); let favoritesWritable = this._settings.is_writable('favorite-apps');
apps.forEach(Lang.bind(this, function(appId) { apps.forEach(Lang.bind(this, function(appId) {
let app = appSys.lookup_app(appId); let app = appSys.lookup_app(appId);
@@ -758,8 +755,7 @@ const AllView = new Lang.Class({
let fadeOffset = Math.min(this._grid.topPadding, let fadeOffset = Math.min(this._grid.topPadding,
this._grid.bottomPadding); this._grid.bottomPadding);
this._scrollView.update_fade_effect(fadeOffset, 0); this._scrollView.update_fade_effect(fadeOffset, 0);
if (fadeOffset > 0) this._scrollView.get_effect('fade').fade_edges = true;
this._scrollView.get_effect('fade').fade_edges = true;
if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) { if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) {
this._adjustment.value = 0; this._adjustment.value = 0;
@@ -787,6 +783,8 @@ const FrequentView = new Lang.Class({
_init: function() { _init: function() {
this.parent(null, { fillParent: true }); this.parent(null, { fillParent: true });
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
this.actor = new St.Widget({ style_class: 'frequent-apps', this.actor = new St.Widget({ style_class: 'frequent-apps',
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
x_expand: true, y_expand: true }); x_expand: true, y_expand: true });
@@ -829,7 +827,7 @@ const FrequentView = new Lang.Class({
// at least on single-monitor setups. // at least on single-monitor setups.
// This also disables drag-to-launch on multi-monitor setups, // This also disables drag-to-launch on multi-monitor setups,
// but we hope that is not used much. // but we hope that is not used much.
let favoritesWritable = global.settings.is_writable('favorite-apps'); let favoritesWritable = this._settings.is_writable('favorite-apps');
for (let i = 0; i < mostUsed.length; i++) { for (let i = 0; i < mostUsed.length; i++) {
if (!mostUsed[i].get_app_info().should_show()) if (!mostUsed[i].get_app_info().should_show())
@@ -1066,7 +1064,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 = Shell.AppSystem.search(query); let groups = Gio.DesktopAppInfo.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) {
@@ -1295,10 +1293,7 @@ const FolderIcon = new Lang.Class({
if (!_listsIntersect(folderCategories, appCategories)) if (!_listsIntersect(folderCategories, appCategories))
return; return;
try { addAppId(appInfo.get_id());
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;
@@ -1809,6 +1804,8 @@ const AppIconMenu = new Lang.Class({
this.actor.add_style_class_name('app-well-menu'); this.actor.add_style_class_name('app-well-menu');
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
// Chain our visibility and lifecycle to that of the source // Chain our visibility and lifecycle to that of the source
source.actor.connect('notify::mapped', Lang.bind(this, function () { source.actor.connect('notify::mapped', Lang.bind(this, function () {
if (!source.actor.mapped) if (!source.actor.mapped)
@@ -1870,7 +1867,7 @@ const AppIconMenu = new Lang.Class({
})); }));
} }
let canFavorite = global.settings.is_writable('favorite-apps'); let canFavorite = this._settings.is_writable('favorite-apps');
if (canFavorite) { if (canFavorite) {
this._appendSeparator(); this._appendSeparator();

View File

@@ -144,7 +144,6 @@ 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) {
@@ -163,13 +162,12 @@ 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 (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) { if (_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._animations[params.settingsSchema]); params.onLoaded(this._animation);
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');
@@ -180,11 +178,12 @@ 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._animations[params.settingsSchema] = animation; this._animationFile = params.file;
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._animations[params.settingsSchema]); params.onLoaded(this._animation);
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');
@@ -404,18 +403,17 @@ const Background = new Lang.Class({
_loadAnimation: function(file) { _loadAnimation: function(file) {
this._cache.getAnimation({ file: file, this._cache.getAnimation({ file: file,
settingsSchema: this._settings.schema_id, onLoaded: Lang.bind(this, function(animation) {
onLoaded: Lang.bind(this, function(animation) { this._animation = 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);
}) })
}); });
}, },
@@ -529,10 +527,6 @@ const BackgroundSource = new Lang.Class({
let file = null; let file = null;
let style; let style;
// We don't watch changes to settings here,
// instead we rely on Background to watch those
// and emit 'changed' at the right time
if (this._overrideImage != null) { if (this._overrideImage != null) {
file = Gio.File.new_for_path(this._overrideImage); file = Gio.File.new_for_path(this._overrideImage);
style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode

View File

@@ -16,10 +16,9 @@ const BackgroundMenu = new Lang.Class({
_init: function(layoutManager) { _init: function(layoutManager) {
this.parent(layoutManager.dummyCursor, 0, St.Side.TOP); this.parent(layoutManager.dummyCursor, 0, St.Side.TOP);
this.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop');
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.addSettingsAction(_("Display Settings"), 'gnome-display-panel.desktop');
this.addSettingsAction(_("Settings"), 'gnome-control-center.desktop'); this.addSettingsAction(_("Settings"), 'gnome-control-center.desktop');
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop');
this.actor.add_style_class_name('background-menu'); this.actor.add_style_class_name('background-menu');

View File

@@ -24,8 +24,6 @@ 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;
@@ -124,8 +122,7 @@ const URLHighlighter = new Lang.Class({
_init: function(text, lineWrap, allowMarkup) { _init: function(text, lineWrap, allowMarkup) {
if (!text) if (!text)
text = ''; text = '';
this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter', this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter' });
x_expand: true, x_align: Clutter.ActorAlign.START });
this._linkColor = '#ccccff'; this._linkColor = '#ccccff';
this.actor.connect('style-changed', Lang.bind(this, function() { this.actor.connect('style-changed', Lang.bind(this, function() {
let [hasColor, color] = this.actor.get_theme_node().lookup_color('link-color', false); let [hasColor, color] = this.actor.get_theme_node().lookup_color('link-color', false);
@@ -978,6 +975,7 @@ 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',
@@ -1107,8 +1105,6 @@ const Message = new Lang.Class({
this._bodyStack.layout_manager.expansion = 1; this._bodyStack.layout_manager.expansion = 1;
this._actionBin.scale_y = 1; this._actionBin.scale_y = 1;
} }
this.emit('expanded');
}, },
unexpand: function(animate) { unexpand: function(animate) {
@@ -1131,8 +1127,6 @@ const Message = new Lang.Class({
this._actionBin.scale_y = 0; this._actionBin.scale_y = 0;
this.expanded = false; this.expanded = false;
} }
this.emit('unexpanded');
}, },
canClose: function() { canClose: function() {
@@ -1241,10 +1235,9 @@ 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, return new St.Icon({ gicon: this.notification.gicon, icon_size: 48 });
icon_size: MESSAGE_ICON_SIZE });
else else
return this.notification.source.createIcon(MESSAGE_ICON_SIZE); return this.notification.source.createIcon(48);
}, },
_onUpdated: function(n, clear) { _onUpdated: function(n, clear) {
@@ -1254,6 +1247,10 @@ const NotificationMessage = new Lang.Class({
this.setUseBodyMarkup(n.bannerBodyMarkup); this.setUseBodyMarkup(n.bannerBodyMarkup);
}, },
canClose: function() {
return !this.notification.resident;
},
_onClicked: function() { _onClicked: function() {
this.notification.activate(); this.notification.activate();
}, },

View File

@@ -9,15 +9,9 @@ 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',
@@ -64,47 +58,27 @@ 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',
@@ -127,22 +101,15 @@ 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._workSpinner.actor, 0, row, 1, 1); layout.attach(this._passwordEntry, 0, row, 1, 1);
layout.attach(this._passwordEntry, 1, row, 1, 1); layout.attach(label, 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;
} }
@@ -211,7 +178,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() {

View File

@@ -13,19 +13,13 @@ 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,
@@ -142,13 +136,6 @@ 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();
@@ -178,10 +165,17 @@ 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;
@@ -189,30 +183,6 @@ 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,
@@ -259,7 +229,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() {

View File

@@ -158,6 +158,14 @@ const TelepathyClient = new Lang.Class({
this._chatSources[channel.get_object_path()] = source; this._chatSources[channel.get_object_path()] = source;
source.connect('destroy', Lang.bind(this, source.connect('destroy', Lang.bind(this,
function() { function() {
if (this._tpClient.is_handling_channel(channel)) {
// The chat box has been destroyed so it can't
// handle the channel any more.
channel.close_async(function(src, result) {
channel.close_finish(result);
});
}
delete this._chatSources[channel.get_object_path()]; delete this._chatSources[channel.get_object_path()];
})); }));
}, },
@@ -266,6 +274,13 @@ const ChatSource = new Lang.Class({
this._channel = channel; this._channel = channel;
this._closedId = this._channel.connect('invalidated', Lang.bind(this, this._channelClosed)); this._closedId = this._channel.connect('invalidated', Lang.bind(this, this._channelClosed));
this._notification = new ChatNotification(this);
this._notification.connect('activated', Lang.bind(this, this.open));
this._notification.connect('updated', Lang.bind(this,
function() {
if (this._banner && this._banner.expanded)
this._ackMessages();
}));
this._notifyTimeoutId = 0; this._notifyTimeoutId = 0;
this._presence = contact.get_presence_type(); this._presence = contact.get_presence_type();
@@ -280,31 +295,12 @@ const ChatSource = new Lang.Class({
// Add ourselves as a source. // Add ourselves as a source.
Main.messageTray.add(this); Main.messageTray.add(this);
this.pushNotification(this._notification);
this._getLogMessages(); this._getLogMessages();
}, },
_ensureNotification: function() {
if (this._notification)
return;
this._notification = new ChatNotification(this);
this._notification.connect('activated', Lang.bind(this, this.open));
this._notification.connect('updated', Lang.bind(this,
function() {
if (this._banner && this._banner.expanded)
this._ackMessages();
}));
this._notification.connect('destroy', Lang.bind(this,
function() {
this._notification = null;
}));
this.pushNotification(this._notification);
},
_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');
}, },
@@ -330,8 +326,7 @@ const ChatSource = new Lang.Class({
return; return;
this.setTitle(newAlias); this.setTitle(newAlias);
if (this._notification) this._notification.appendAliasChange(oldAlias, newAlias);
this._notification.appendAliasChange(oldAlias, newAlias);
}, },
getIcon: function() { getIcon: function() {
@@ -374,10 +369,9 @@ const ChatSource = new Lang.Class({
_updateAvatarIcon: function() { _updateAvatarIcon: function() {
this.iconUpdated(); this.iconUpdated();
if (this._notifiction) this._notification.update(this._notification.title,
this._notification.update(this._notification.title, this._notification.bannerBodyText,
this._notification.bannerBodyText, { gicon: this.getIcon() });
{ gicon: this.getIcon() });
}, },
open: function() { open: function() {
@@ -418,7 +412,6 @@ const ChatSource = new Lang.Class({
let [success, events] = logManager.get_filtered_events_finish(result); let [success, events] = logManager.get_filtered_events_finish(result);
let logMessages = events.map(makeMessageFromTplEvent); let logMessages = events.map(makeMessageFromTplEvent);
this._ensureNotification();
let pendingTpMessages = this._channel.get_pending_messages(); let pendingTpMessages = this._channel.get_pending_messages();
let pendingMessages = []; let pendingMessages = [];
@@ -468,18 +461,6 @@ const ChatSource = new Lang.Class({
}, },
destroy: function(reason) { destroy: function(reason) {
if (this._client.is_handling_channel(this._channel)) {
// The chat box has been destroyed so it can't
// handle the channel any more.
this._channel.close_async(function(channel, result) {
channel.close_finish(result);
});
}
// Keep source alive while the channel is open
if (reason != MessageTray.NotificationDestroyedReason.SOURCE_CLOSED)
return;
if (this._destroyed) if (this._destroyed)
return; return;
@@ -493,6 +474,9 @@ const ChatSource = new Lang.Class({
this._contact.disconnect(this._notifyAvatarId); this._contact.disconnect(this._notifyAvatarId);
this._contact.disconnect(this._presenceChangedId); this._contact.disconnect(this._presenceChangedId);
if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId);
this.parent(reason); this.parent(reason);
}, },
@@ -517,7 +501,6 @@ const ChatSource = new Lang.Class({
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT) if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
return; return;
this._ensureNotification();
this._pendingMessages.push(message); this._pendingMessages.push(message);
this.countUpdated(); this.countUpdated();
@@ -545,7 +528,6 @@ const ChatSource = new Lang.Class({
// This is called for both messages we send from // This is called for both messages we send from
// our client and other clients as well. // our client and other clients as well.
_messageSent: function(channel, message, flags, token) { _messageSent: function(channel, message, flags, token) {
this._ensureNotification();
message = makeMessageFromTpMessage(message, NotificationDirection.SENT); message = makeMessageFromTpMessage(message, NotificationDirection.SENT);
this._notification.appendMessage(message); this._notification.appendMessage(message);
}, },
@@ -583,10 +565,9 @@ const ChatSource = new Lang.Class({
}, },
_presenceChanged: function (contact, presence, status, message) { _presenceChanged: function (contact, presence, status, message) {
if (this._notification) this._notification.update(this._notification.title,
this._notification.update(this._notification.title, this._notification.bannerBodyText,
this._notification.bannerBodyText, { secondaryGIcon: this.getSecondaryIcon() });
{ secondaryGIcon: this.getSecondaryIcon() });
}, },
_pendingRemoved: function(channel, message) { _pendingRemoved: function(channel, message) {
@@ -596,10 +577,6 @@ const ChatSource = new Lang.Class({
this._pendingMessages.splice(idx, 1); this._pendingMessages.splice(idx, 1);
this.countUpdated(); this.countUpdated();
} }
if (this._pendingMessages.length == 0 &&
this._banner && !this._banner.expanded)
this._banner.hide();
}, },
_ackMessages: function() { _ackMessages: function() {
@@ -623,13 +600,6 @@ const ChatNotification = new Lang.Class({
this._timestampTimeoutId = 0; this._timestampTimeoutId = 0;
}, },
destroy: function(reason) {
if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId);
this._timestampTimeoutId = 0;
this.parent(reason);
},
/** /**
* appendMessage: * appendMessage:
* @message: An object with the properties: * @message: An object with the properties:
@@ -712,7 +682,6 @@ const ChatNotification = new Lang.Class({
// Reset the old message timeout // Reset the old message timeout
if (this._timestampTimeoutId) if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId); Mainloop.source_remove(this._timestampTimeoutId);
this._timestampTimeoutId = 0;
let message = { realMessage: props.group != 'meta', let message = { realMessage: props.group != 'meta',
showTimestamp: false }; showTimestamp: false };
@@ -861,10 +830,6 @@ const ChatNotificationBanner = new Lang.Class({
adjustment.value = adjustment.upper; adjustment.value = adjustment.upper;
}, },
hide: function() {
this.emit('done-displaying');
},
_addMessage: function(message) { _addMessage: function(message) {
let highlighter = new Calendar.URLHighlighter(message.body, true, true); let highlighter = new Calendar.URLHighlighter(message.body, true, true);
let body = highlighter.actor; let body = highlighter.actor;

View File

@@ -242,6 +242,8 @@ const ShowAppsIcon = new Lang.Class({
_init: function() { _init: function() {
this.parent(); this.parent();
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
this.toggleButton = new St.Button({ style_class: 'show-apps', this.toggleButton = new St.Button({ style_class: 'show-apps',
track_hover: true, track_hover: true,
can_focus: true, can_focus: true,
@@ -270,7 +272,7 @@ const ShowAppsIcon = new Lang.Class({
if (app == null) if (app == null)
return false; return false;
if (!global.settings.is_writable('favorite-apps')) if (!this._settings.is_writable('favorite-apps'))
return false; return false;
let id = app.get_id(); let id = app.get_id();
@@ -428,6 +430,8 @@ const Dash = new Lang.Class({
this._workId = Main.initializeDeferredWork(this._box, Lang.bind(this, this._redisplay)); this._workId = Main.initializeDeferredWork(this._box, Lang.bind(this, this._redisplay));
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
this._appSystem = Shell.AppSystem.get_default(); this._appSystem = Shell.AppSystem.get_default();
this._appSystem.connect('installed-changed', Lang.bind(this, function() { this._appSystem.connect('installed-changed', Lang.bind(this, function() {
@@ -860,7 +864,7 @@ const Dash = new Lang.Class({
if (app == null || app.is_window_backed()) if (app == null || app.is_window_backed())
return DND.DragMotionResult.NO_DROP; return DND.DragMotionResult.NO_DROP;
if (!global.settings.is_writable('favorite-apps')) if (!this._settings.is_writable('favorite-apps'))
return DND.DragMotionResult.NO_DROP; return DND.DragMotionResult.NO_DROP;
let favorites = AppFavorites.getAppFavorites().getFavorites(); let favorites = AppFavorites.getAppFavorites().getFavorites();
@@ -939,7 +943,7 @@ const Dash = new Lang.Class({
return false; return false;
} }
if (!global.settings.is_writable('favorite-apps')) if (!this._settings.is_writable('favorite-apps'))
return false; return false;
let id = app.get_id(); let id = app.get_id();

View File

@@ -357,6 +357,8 @@ const DateMenuButton = new Lang.Class({
this._date.setDate(now); this._date.setDate(now);
this._messageList.setDate(now); this._messageList.setDate(now);
} }
// Block notification banners while the menu is open
Main.messageTray.bannerBlocked = isOpen;
})); }));
// Fill up the first column // Fill up the first column

View File

@@ -81,6 +81,7 @@ function init() {
// Miscellaneous monkeypatching // Miscellaneous monkeypatching
_patchContainerClass(St.BoxLayout); _patchContainerClass(St.BoxLayout);
_patchContainerClass(St.Table);
_patchLayoutClass(Clutter.TableLayout, { row_spacing: 'spacing-rows', _patchLayoutClass(Clutter.TableLayout, { row_spacing: 'spacing-rows',
column_spacing: 'spacing-columns' }); column_spacing: 'spacing-columns' });

View File

@@ -24,6 +24,9 @@ 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';
@@ -111,35 +114,6 @@ const Key = new Lang.Class({
key.release(); key.release();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
})); }));
button.connect('touch-event', Lang.bind(this,
function (actor, event) {
let device = event.get_device();
let sequence = event.get_event_sequence();
// We only handle touch events here on wayland. On X11
// we do get emulated pointer events, which already works
// for single-touch cases. Besides, the X11 passive touch grab
// set up by Mutter will make us see first the touch events
// and later the pointer events, so it will look like two
// unrelated series of events, we want to avoid double handling
// in these cases.
if (!Meta.is_wayland_compositor())
return Clutter.EVENT_PROPAGATE;
if (!this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_BEGIN) {
device.sequence_grab(sequence, actor);
this._touchPressed = true;
key.press();
} else if (this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_END &&
device.sequence_get_grabbed_actor(sequence) == actor) {
device.sequence_ungrab(sequence);
this._touchPressed = false;
key.release();
}
return Clutter.EVENT_PROPAGATE;
}));
return button; return button;
}, },
@@ -204,13 +178,12 @@ 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;
if (Meta.is_wayland_compositor() &&
Caribou.DisplayAdapter.set_default)
Caribou.DisplayAdapter.set_default(new ShellWaylandAdapter());
Meta.get_backend().connect('last-device-changed', Lang.bind(this, Meta.get_backend().connect('last-device-changed', Lang.bind(this,
function (backend, deviceId) { function (backend, deviceId) {
let manager = Clutter.DeviceManager.get_default(); let manager = Clutter.DeviceManager.get_default();
@@ -752,24 +725,3 @@ const KeyboardSource = new Lang.Class({
this._keyboard.show(Main.layoutManager.bottomIndex); this._keyboard.show(Main.layoutManager.bottomIndex);
} }
}); });
const ShellWaylandAdapter = new Lang.Class({
Name: 'ShellWaylandAdapter',
Extends: Caribou.XAdapter,
vfunc_keyval_press: function(keyval) {
let focus = global.stage.get_key_focus();
if (focus instanceof Clutter.Text)
Shell.util_text_insert_keyval(focus, keyval);
else
this.parent(keyval);
},
vfunc_keyval_release: function(keyval) {
let focus = global.stage.get_key_focus();
if (focus instanceof Clutter.Text)
return; // do nothing
else
this.parent(keyval);
},
});

View File

@@ -11,7 +11,6 @@ const St = imports.gi.St;
const Background = imports.ui.background; const Background = imports.ui.background;
const BackgroundMenu = imports.ui.backgroundMenu; const BackgroundMenu = imports.ui.backgroundMenu;
const LoginManager = imports.misc.loginManager;
const DND = imports.ui.dnd; const DND = imports.ui.dnd;
const Main = imports.ui.main; const Main = imports.ui.main;
@@ -274,18 +273,6 @@ const LayoutManager = new Lang.Class({
global.screen.connect('in-fullscreen-changed', global.screen.connect('in-fullscreen-changed',
Lang.bind(this, this._updateFullscreen)); Lang.bind(this, this._updateFullscreen));
this._monitorsChanged(); this._monitorsChanged();
// NVIDIA drivers don't preserve FBO contents across
// suspend/resume, see
// https://bugzilla.gnome.org/show_bug.cgi?id=739178
if (Shell.util_need_background_refresh()) {
LoginManager.getLoginManager().connect('prepare-for-sleep',
function(lm, suspending) {
if (suspending)
return;
Meta.Background.refresh_all();
});
}
}, },
// This is called by Main after everything else is constructed // This is called by Main after everything else is constructed
@@ -837,7 +824,6 @@ const LayoutManager = new Lang.Class({
// need to connect to 'destroy' too. // need to connect to 'destroy' too.
this._trackedActors.push(actorData); this._trackedActors.push(actorData);
this._updateActorVisibility(actorData);
this._queueUpdateRegions(); this._queueUpdateRegions();
}, },
@@ -856,23 +842,25 @@ const LayoutManager = new Lang.Class({
this._queueUpdateRegions(); this._queueUpdateRegions();
}, },
_updateActorVisibility: function(actorData) {
if (!actorData.trackFullscreen)
return;
let monitor = this.findMonitorForActor(actorData.actor);
actorData.actor.visible = !(global.window_group.visible &&
monitor &&
monitor.inFullscreen);
},
_updateVisibility: function() { _updateVisibility: function() {
let windowsVisible = Main.sessionMode.hasWindows && !this._inOverview; let windowsVisible = Main.sessionMode.hasWindows && !this._inOverview;
global.window_group.visible = windowsVisible; global.window_group.visible = windowsVisible;
global.top_window_group.visible = windowsVisible; global.top_window_group.visible = windowsVisible;
this._trackedActors.forEach(Lang.bind(this, this._updateActorVisibility)); for (let i = 0; i < this._trackedActors.length; i++) {
let actorData = this._trackedActors[i], visible;
if (!actorData.trackFullscreen)
continue;
if (!windowsVisible)
visible = true;
else if (this.findMonitorForActor(actorData.actor).inFullscreen)
visible = false;
else
visible = true;
actorData.actor.visible = visible;
}
}, },
getWorkAreaForMonitor: function(monitorIndex) { getWorkAreaForMonitor: function(monitorIndex) {
@@ -1315,11 +1303,8 @@ const PressureBarrier = new Lang.Class({
}, },
_onBarrierLeft: function(barrier, event) { _onBarrierLeft: function(barrier, event) {
barrier._isHit = false; this._reset();
if (this._barriers.every(function(b) { return !b._isHit; })) { this._isTriggered = false;
this._reset();
this._isTriggered = false;
}
}, },
_trigger: function() { _trigger: function() {
@@ -1329,8 +1314,6 @@ const PressureBarrier = new Lang.Class({
}, },
_onBarrierHit: function(barrier, event) { _onBarrierHit: function(barrier, event) {
barrier._isHit = true;
// If we've triggered the barrier, wait until the pointer has the // If we've triggered the barrier, wait until the pointer has the
// left the barrier hitbox until we trigger it again. // left the barrier hitbox until we trigger it again.
if (this._isTriggered) if (this._isTriggered)

View File

@@ -1,5 +1,4 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@@ -29,9 +28,8 @@ const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
}; };
// Offset of the original position from the bottom-right corner // Offset of the original position from the bottom-right corner
const CONCEALED_WIDTH = 3; const CONCEALED_VISIBLE_FRACTION = 0.2;
const REVEAL_ANIMATION_TIME = 0.2; const REVEAL_ANIMATION_TIME = 0.2;
const TEMP_REVEAL_TIME = 2;
const BARRIER_THRESHOLD = 70; const BARRIER_THRESHOLD = 70;
const BARRIER_TIMEOUT = 1000; const BARRIER_TIMEOUT = 1000;
@@ -102,7 +100,6 @@ const LegacyTray = new Lang.Class({
Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false }); Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
Main.layoutManager.trackChrome(this._slider, { affectsInputRegion: true }); Main.layoutManager.trackChrome(this._slider, { affectsInputRegion: true });
Main.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.modalDialogGroup);
Main.ctrlAltTabManager.addGroup(this.actor, Main.ctrlAltTabManager.addGroup(this.actor,
_("Status Icons"), 'focus-legacy-systray-symbolic', _("Status Icons"), 'focus-legacy-systray-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.BOTTOM }); { sortGroup: CtrlAltTab.SortGroup.BOTTOM });
@@ -150,41 +147,17 @@ const LegacyTray = new Lang.Class({
St.ButtonMask.THREE, St.ButtonMask.THREE,
can_focus: true, can_focus: true,
x_fill: true, y_fill: true }); x_fill: true, y_fill: true });
let app = Shell.WindowTracker.get_default().get_app_from_pid(icon.pid);
if (!app)
app = Shell.AppSystem.get_default().lookup_startup_wmclass(wmClass);
if (!app)
app = Shell.AppSystem.get_default().lookup_desktop_wmclass(wmClass);
if (app)
button.accessible_name = app.get_name();
else
button.accessible_name = icon.title;
button.connect('clicked', button.connect('clicked',
function() { function() {
icon.click(Clutter.get_current_event()); icon.click(Clutter.get_current_event());
}); });
button.connect('key-press-event',
function() {
icon.click(Clutter.get_current_event());
return Clutter.EVENT_PROPAGATE;
});
button.connect('key-focus-in', Lang.bind(this, button.connect('key-focus-in', Lang.bind(this,
function() { function() {
this._concealHandle.show(); this._concealHandle.show();
})); }));
this._iconBox.add_actor(button); this._iconBox.add_actor(button);
this._sync();
if (!this._concealHandle.visible) {
this._concealHandle.show();
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, TEMP_REVEAL_TIME,
Lang.bind(this, function() {
this._concealHandle.hide();
return GLib.SOURCE_REMOVE;
}));
}
}, },
_onTrayIconRemoved: function(tm, icon) { _onTrayIconRemoved: function(tm, icon) {
@@ -215,7 +188,11 @@ const LegacyTray = new Lang.Class({
this._horizontalBarrier.y2 == y2) this._horizontalBarrier.y2 == y2)
return; return;
this._unsetBarrier(); if (this._horizontalBarrier) {
this._pressureBarrier.removeBarrier(this._horizontalBarrier);
this._horizontalBarrier.destroy();
this._horizontalBarrier = null;
}
let directions = (rtl ? Meta.BarrierDirection.NEGATIVE_X : Meta.BarrierDirection.POSITIVE_X); let directions = (rtl ? Meta.BarrierDirection.NEGATIVE_X : Meta.BarrierDirection.POSITIVE_X);
this._horizontalBarrier = new Meta.Barrier({ display: global.display, this._horizontalBarrier = new Meta.Barrier({ display: global.display,
@@ -225,15 +202,6 @@ const LegacyTray = new Lang.Class({
this._pressureBarrier.addBarrier(this._horizontalBarrier); this._pressureBarrier.addBarrier(this._horizontalBarrier);
}, },
_unsetBarrier: function() {
if (this._horizontalBarrier == null)
return;
this._pressureBarrier.removeBarrier(this._horizontalBarrier);
this._horizontalBarrier.destroy();
this._horizontalBarrier = null;
},
_sync: function() { _sync: function() {
// FIXME: we no longer treat tray icons as notifications // FIXME: we no longer treat tray icons as notifications
let allowed = Main.sessionMode.hasNotifications; let allowed = Main.sessionMode.hasNotifications;
@@ -254,20 +222,17 @@ const LegacyTray = new Lang.Class({
let [, boxWidth] = this._box.get_preferred_width(-1); let [, boxWidth] = this._box.get_preferred_width(-1);
let [, handleWidth] = this._revealHandle.get_preferred_width(-1); let [, handleWidth] = this._revealHandle.get_preferred_width(-1);
if (this._revealHandle.hover) targetSlide = handleWidth / boxWidth;
targetSlide = handleWidth / boxWidth; if (!this._revealHandle.hover)
else targetSlide *= CONCEALED_VISIBLE_FRACTION;
targetSlide = CONCEALED_WIDTH / boxWidth;
} }
if (this.actor.visible) { if (this.actor.visible)
Tweener.addTween(this._slideLayout, Tweener.addTween(this._slideLayout,
{ slideX: targetSlide, { slideX: targetSlide,
time: REVEAL_ANIMATION_TIME, time: REVEAL_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
} else { else
this._slideLayout.slideX = targetSlide; this._slideLayout.slideX = targetSlide;
this._unsetBarrier();
}
} }
}); });

View File

@@ -4,7 +4,6 @@ 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;
@@ -23,8 +22,6 @@ 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';
@@ -447,6 +444,55 @@ const Magnifier = new Lang.Class({
this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA }); this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA }); this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA });
if (zoomRegion) {
// Mag factor is accurate to two decimal places.
let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
if (aPref != 0.0)
zoomRegion.setMagFactor(aPref, aPref);
aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
if (aPref)
zoomRegion.setScreenPosition(aPref);
zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
aPref = this._settings.get_double(COLOR_SATURATION_KEY);
if (aPref)
zoomRegion.setColorSaturation(aPref);
let bc = {};
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
zoomRegion.setBrightness(bc);
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
zoomRegion.setContrast(bc);
}
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
this.addCrosshairs();
this.setCrosshairsVisible(showCrosshairs);
this._appSettings.connect('changed::' + SHOW_KEY, this._appSettings.connect('changed::' + SHOW_KEY,
Lang.bind(this, function() { Lang.bind(this, function() {
this.setActive(this._appSettings.get_boolean(SHOW_KEY)); this.setActive(this._appSettings.get_boolean(SHOW_KEY));
@@ -515,56 +561,6 @@ const Magnifier = new Lang.Class({
Lang.bind(this, function() { Lang.bind(this, function() {
this.setCrosshairsClip(this._settings.get_boolean(CROSS_HAIRS_CLIP_KEY)); this.setCrosshairsClip(this._settings.get_boolean(CROSS_HAIRS_CLIP_KEY));
})); }));
if (zoomRegion) {
// Mag factor is accurate to two decimal places.
let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
if (aPref != 0.0)
zoomRegion.setMagFactor(aPref, aPref);
aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
if (aPref)
zoomRegion.setScreenPosition(aPref);
zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
aPref = this._settings.get_double(COLOR_SATURATION_KEY);
if (aPref)
zoomRegion.setColorSaturation(aPref);
let bc = {};
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
zoomRegion.setBrightness(bc);
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
zoomRegion.setContrast(bc);
}
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
this.addCrosshairs();
this.setCrosshairsVisible(showCrosshairs);
return this._appSettings.get_boolean(SHOW_KEY); return this._appSettings.get_boolean(SHOW_KEY);
}, },
@@ -712,9 +708,6 @@ 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',
@@ -1074,26 +1067,6 @@ 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
@@ -1102,8 +1075,6 @@ 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 });
@@ -1409,7 +1380,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._scrollContentsToDelayed(xCaret, yCaret); this.scrollContentsTo(xCaret, yCaret);
}, },
_centerFromFocusPosition: function() { _centerFromFocusPosition: function() {
@@ -1423,7 +1394,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._scrollContentsToDelayed(xFocus, yFocus); this.scrollContentsTo(xFocus, yFocus);
}, },
_centerFromPointPush: function(xPoint, yPoint) { _centerFromPointPush: function(xPoint, yPoint) {

View File

@@ -69,6 +69,26 @@ const Urgency = {
CRITICAL: 3 CRITICAL: 3
}; };
function _fixMarkup(text, allowMarkup) {
if (allowMarkup) {
// Support &amp;, &quot;, &apos;, &lt; and &gt;, escape all other
// occurrences of '&'.
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&amp;');
// Support <b>, <i>, and <u>, escape anything else
// so it displays as raw markup.
_text = _text.replace(/<(?!\/?[biu]>)/g, '&lt;');
try {
Pango.parse_markup(_text, -1, '');
return _text;
} catch (e) {}
}
// !allowMarkup, or invalid markup
return GLib.markup_escape_text(text, -1);
}
const FocusGrabber = new Lang.Class({ const FocusGrabber = new Lang.Class({
Name: 'FocusGrabber', Name: 'FocusGrabber',
@@ -238,8 +258,6 @@ const NotificationApplicationPolicy = new Lang.Class({
_changed: function(settings, key) { _changed: function(settings, key) {
this.emit('policy-changed', key); this.emit('policy-changed', key);
if (key == 'enable')
this.emit('enable-changed');
}, },
_canonicalizeId: function(id) { _canonicalizeId: function(id) {
@@ -490,7 +508,6 @@ const NotificationBanner = new Lang.Class({
_init: function(notification) { _init: function(notification) {
this.parent(notification); this.parent(notification);
this.actor.can_focus = false;
this.actor.add_style_class_name('notification-banner'); this.actor.add_style_class_name('notification-banner');
this._buttonBox = null; this._buttonBox = null;
@@ -736,6 +753,10 @@ const Source = new Lang.Class({
return this.count > 1; return this.count > 1;
}, },
get isClearable() {
return !this.isChat && !this.resident;
},
countUpdated: function() { countUpdated: function() {
this.emit('count-updated'); this.emit('count-updated');
}, },
@@ -908,6 +929,8 @@ const MessageTray = new Lang.Class({
this._notificationTimeoutId = 0; this._notificationTimeoutId = 0;
this._notificationRemoved = false; this._notificationRemoved = false;
this.clearableCount = 0;
Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false }); Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
Main.layoutManager.trackChrome(this._bannerBin, { affectsInputRegion: true }); Main.layoutManager.trackChrome(this._bannerBin, { affectsInputRegion: true });
@@ -958,14 +981,6 @@ const MessageTray = new Lang.Class({
Shell.util_set_hidden_from_pick(this.actor, false); Shell.util_set_hidden_from_pick(this.actor, false);
}, },
get bannerAlignment() {
return this._bannerBin.get_x_align();
},
set bannerAlignment(align) {
this._bannerBin.set_x_align(align);
},
_onNotificationKeyRelease: function(actor, event) { _onNotificationKeyRelease: function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) { if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) {
this._expireNotification(); this._expireNotification();
@@ -1016,6 +1031,9 @@ const MessageTray = new Lang.Class({
destroyId: 0, destroyId: 0,
}; };
if (source.isClearable)
this.clearableCount++;
this._sources.set(source, obj); this._sources.set(source, obj);
obj.notifyId = source.connect('notify', Lang.bind(this, this._onNotify)); obj.notifyId = source.connect('notify', Lang.bind(this, this._onNotify));
@@ -1028,6 +1046,9 @@ const MessageTray = new Lang.Class({
let obj = this._sources.get(source); let obj = this._sources.get(source);
this._sources.delete(source); this._sources.delete(source);
if (source.isClearable)
this.clearableCount--;
source.disconnect(obj.notifyId); source.disconnect(obj.notifyId);
source.disconnect(obj.destroyId); source.disconnect(obj.destroyId);

View File

@@ -14,6 +14,7 @@ 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;
@@ -22,6 +23,10 @@ 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,
@@ -74,9 +79,7 @@ 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',
x_align: Clutter.ActorAlign.CENTER, vertical: true });
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.
@@ -97,8 +100,7 @@ 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,
@@ -106,7 +108,8 @@ 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.Widget ({ layout_manager: new Clutter.BoxLayout ({ homogeneous:true }) }); this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
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 });
@@ -115,6 +118,8 @@ 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() {
@@ -142,12 +147,16 @@ const ModalDialog = new Lang.Class({
else else
x_alignment = St.Align.MIDDLE; x_alignment = St.Align.MIDDLE;
this.addButton(buttonInfo); this.addButton(buttonInfo, { expand: true,
x_fill: false,
y_fill: false,
x_align: x_alignment,
y_align: St.Align.MIDDLE });
} }
}, },
addButton: function(buttonInfo) { addButton: function(buttonInfo, layoutInfo) {
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'];
@@ -161,12 +170,10 @@ const ModalDialog = new Lang.Class({
else else
keys = []; keys = [];
let button = new St.Button({ style_class: 'modal-dialog-linked-button', let button = new St.Button({ style_class: 'modal-dialog-button 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);
@@ -181,11 +188,47 @@ 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_actor(button); this.buttonLayout.add(button, layoutInfo);
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;

View File

@@ -15,7 +15,8 @@ const OsdMonitorLabel = new Lang.Class({
Name: 'OsdMonitorLabel', Name: 'OsdMonitorLabel',
_init: function(monitor, label) { _init: function(monitor, label) {
this._actor = new St.Widget({ x_expand: true, this._actor = new St.Widget({ opacity: 0,
x_expand: true,
y_expand: true }); y_expand: true });
this._monitor = monitor; this._monitor = monitor;
@@ -33,6 +34,10 @@ const OsdMonitorLabel = new Lang.Class({
this._position(); this._position();
Meta.disable_unredirect_for_screen(global.screen); Meta.disable_unredirect_for_screen(global.screen);
Tweener.addTween(this._actor,
{ opacity: 255,
time: FADE_TIME,
transition: 'easeOutQuad' });
}, },
_position: function() { _position: function() {
@@ -47,8 +52,15 @@ const OsdMonitorLabel = new Lang.Class({
}, },
destroy: function() { destroy: function() {
this._actor.destroy(); Tweener.addTween(this._actor,
Meta.enable_unredirect_for_screen(global.screen); { opacity: 0,
time: FADE_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this._actor.destroy();
Meta.enable_unredirect_for_screen(global.screen);
})
});
} }
}); });

View File

@@ -107,6 +107,13 @@ 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 }));
@@ -121,11 +128,6 @@ 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 = [];

View File

@@ -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 = 16; const PANEL_ICON_SIZE = 24;
const APP_MENU_ICON_MARGIN = 0; const APP_MENU_ICON_MARGIN = 2;
const BUTTON_DND_ACTIVATION_TIMEOUT = 250; const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
const SPINNER_ANIMATION_TIME = 1.0; const SPINNER_ANIMATION_TIME = 0.2;
// 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
@@ -697,6 +697,7 @@ 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);
}, },
}); });
@@ -932,14 +933,6 @@ const Panel = new Lang.Class({
this._updateBox(panel.center, this._centerBox); this._updateBox(panel.center, this._centerBox);
this._updateBox(panel.right, this._rightBox); this._updateBox(panel.right, this._rightBox);
if (panel.left.indexOf('dateMenu') != -1)
Main.messageTray.bannerAlignment = Clutter.ActorAlign.START;
else if (panel.right.indexOf('dateMenu') != -1)
Main.messageTray.bannerAlignment = Clutter.ActorAlign.END;
// Default to center if there is no dateMenu
else
Main.messageTray.bannerAlignment = Clutter.ActorAlign.CENTER;
if (this._sessionStyle) if (this._sessionStyle)
this._removeStyleClassName(this._sessionStyle); this._removeStyleClassName(this._sessionStyle);
@@ -1002,7 +995,6 @@ const Panel = new Lang.Class({
if (parent) if (parent)
parent.remove_actor(container); parent.remove_actor(container);
box.insert_child_at_index(container, position); box.insert_child_at_index(container, position);
if (indicator.menu) if (indicator.menu)
this.menuManager.addMenu(indicator.menu); this.menuManager.addMenu(indicator.menu);
@@ -1012,8 +1004,6 @@ const Panel = new Lang.Class({
emitter.disconnect(destroyId); emitter.disconnect(destroyId);
container.destroy(); container.destroy();
})); }));
indicator.connect('menu-set', Lang.bind(this, this._onMenuSet));
this._onMenuSet(indicator);
}, },
addToStatusArea: function(role, indicator, position, box) { addToStatusArea: function(role, indicator, position, box) {
@@ -1045,24 +1035,5 @@ const Panel = new Lang.Class({
this.actor.remove_style_class_name(className); this.actor.remove_style_class_name(className);
this._rightCorner.actor.remove_style_class_name(className); this._rightCorner.actor.remove_style_class_name(className);
this._leftCorner.actor.remove_style_class_name(className); this._leftCorner.actor.remove_style_class_name(className);
},
_onMenuSet: function(indicator) {
if (!indicator.menu || indicator.menu._openChangedId > 0)
return;
indicator.menu._openChangedId = indicator.menu.connect('open-state-changed',
Lang.bind(this, function(menu, isOpen) {
let boxAlignment;
if (this._leftBox.contains(indicator.container))
boxAlignment = Clutter.ActorAlign.START;
else if (this._centerBox.contains(indicator.container))
boxAlignment = Clutter.ActorAlign.CENTER;
else if (this._rightBox.contains(indicator.container))
boxAlignment = Clutter.ActorAlign.END;
if (boxAlignment == Main.messageTray.bannerAlignment)
Main.messageTray.bannerBlocked = isOpen;
}));
} }
}); });

View File

@@ -128,7 +128,6 @@ const Button = new Lang.Class({
Main.uiGroup.add_actor(this.menu.actor); Main.uiGroup.add_actor(this.menu.actor);
this.menu.actor.hide(); this.menu.actor.hide();
} }
this.emit('menu-set');
}, },
_onEvent: function(actor, event) { _onEvent: function(actor, event) {

View File

@@ -169,10 +169,10 @@ const PopupBaseMenuItem = new Lang.Class({
if (activeChanged) { if (activeChanged) {
this.active = active; this.active = active;
if (active) { if (active) {
this.actor.add_style_class_name('selected'); this.actor.add_style_class_name('active');
this.actor.grab_key_focus(); this.actor.grab_key_focus();
} else { } else {
this.actor.remove_style_class_name('selected'); this.actor.remove_style_class_name('active');
// Remove the CSS active state if the user press the button and // Remove the CSS active state if the user press the button and
// while holding moves to another menu item, so we don't paint all items. // while holding moves to another menu item, so we don't paint all items.
// The correct behaviour would be to set the new item with the CSS // The correct behaviour would be to set the new item with the CSS
@@ -1059,6 +1059,11 @@ 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 });

View File

@@ -63,7 +63,7 @@ const SearchProvider2Iface = '<node> \
var SearchProviderProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProviderIface); var SearchProviderProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProviderIface);
var SearchProvider2ProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProvider2Iface); var SearchProvider2ProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProvider2Iface);
function loadRemoteSearchProviders(searchSettings, callback) { function loadRemoteSearchProviders(callback) {
let objectPaths = {}; let objectPaths = {};
let loadedProviders = []; let loadedProviders = [];
@@ -124,6 +124,7 @@ function loadRemoteSearchProviders(searchSettings, callback) {
} }
} }
let searchSettings = new Gio.Settings({ schema_id: Search.SEARCH_PROVIDERS_SCHEMA });
if (searchSettings.get_boolean('disable-external')) { if (searchSettings.get_boolean('disable-external')) {
callback([]); callback([]);
return; return;

View File

@@ -507,22 +507,21 @@ const ScreenShield = new Lang.Class({
this._liftShield(true, 0); this._liftShield(true, 0);
})); }));
this._inhibitor = null;
this._aboutToSuspend = false;
this._loginManager = LoginManager.getLoginManager(); this._loginManager = LoginManager.getLoginManager();
this._loginManager.connect('prepare-for-sleep', this._loginManager.connect('prepare-for-sleep',
Lang.bind(this, this._prepareForSleep)); Lang.bind(this, this._prepareForSleep));
this._inhibitSuspend();
this._loginSession = null;
this._loginManager.getCurrentSessionProxy(Lang.bind(this, this._loginManager.getCurrentSessionProxy(Lang.bind(this,
function(sessionProxy) { function(sessionProxy) {
this._loginSession = sessionProxy; this._loginSession = sessionProxy;
this._loginSession.connectSignal('Lock', Lang.bind(this, function() { this.lock(false); })); this._loginSession.connectSignal('Lock', Lang.bind(this, function() { this.lock(false); }));
this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); })); this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); }));
this._loginSession.connect('g-properties-changed', Lang.bind(this, this._syncInhibitor));
this._syncInhibitor();
})); }));
this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA }); this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
this._settings.connect('changed::' + LOCK_ENABLED_KEY, Lang.bind(this, this._syncInhibitor));
this._isModal = false; this._isModal = false;
this._hasLockScreen = false; this._hasLockScreen = false;
@@ -548,18 +547,6 @@ const ScreenShield = new Lang.Class({
this.idleMonitor = Meta.IdleMonitor.get_core(); this.idleMonitor = Meta.IdleMonitor.get_core();
this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen); this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
this._syncInhibitor();
},
_setActive: function(active) {
let prevIsActive = this._isActive;
this._isActive = active;
if (prevIsActive != this._isActive)
this.emit('active-changed');
this._syncInhibitor();
}, },
_createBackground: function(monitorIndex) { _createBackground: function(monitorIndex) {
@@ -677,28 +664,31 @@ const ScreenShield = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, },
_syncInhibitor: function() { _inhibitSuspend: function() {
let inhibit = (this._loginSession && this._loginSession.Active && this._loginManager.inhibit(_("GNOME needs to lock the screen"),
!this._isActive && this._settings.get_boolean(LOCK_ENABLED_KEY)); Lang.bind(this, function(inhibitor) {
if (inhibit) { this._inhibitor = inhibitor;
this._loginManager.inhibit(_("GNOME needs to lock the screen"), }));
Lang.bind(this, function(inhibitor) { },
if (this._inhibitor)
this._inhibitor.close(null); _uninhibitSuspend: function() {
this._inhibitor = inhibitor; if (this._inhibitor)
})); this._inhibitor.close(null);
} else { this._inhibitor = null;
if (this._inhibitor)
this._inhibitor.close(null);
this._inhibitor = null;
}
}, },
_prepareForSleep: function(loginManager, aboutToSuspend) { _prepareForSleep: function(loginManager, aboutToSuspend) {
this._aboutToSuspend = aboutToSuspend;
if (aboutToSuspend) { if (aboutToSuspend) {
if (this._settings.get_boolean(LOCK_ENABLED_KEY)) if (!this._settings.get_boolean(LOCK_ENABLED_KEY)) {
this.lock(true); this._uninhibitSuspend();
return;
}
this.lock(true);
} else { } else {
this._inhibitSuspend();
this._wakeUpScreen(); this._wakeUpScreen();
} }
}, },
@@ -1093,7 +1083,15 @@ const ScreenShield = new Lang.Class({
}, },
_completeLockScreenShown: function() { _completeLockScreenShown: function() {
this._setActive(true); let prevIsActive = this._isActive;
this._isActive = true;
if (prevIsActive != this._isActive)
this.emit('active-changed');
if (this._aboutToSuspend)
this._uninhibitSuspend();
this.emit('lock-screen-shown'); this.emit('lock-screen-shown');
}, },
@@ -1187,7 +1185,8 @@ const ScreenShield = new Lang.Class({
// gnome-settings-daemon will stop blanking the screen // gnome-settings-daemon will stop blanking the screen
this._activationTime = 0; this._activationTime = 0;
this._setActive(false); this._isActive = false;
this.emit('active-changed');
return; return;
} }
@@ -1230,8 +1229,9 @@ const ScreenShield = new Lang.Class({
} }
this._activationTime = 0; this._activationTime = 0;
this._setActive(false); this._isActive = false;
this._isLocked = false; this._isLocked = false;
this.emit('active-changed');
this.emit('locked-changed'); this.emit('locked-changed');
global.set_runtime_state(LOCKED_STATE_STR, null); global.set_runtime_state(LOCKED_STATE_STR, null);
}, },

View File

@@ -416,7 +416,6 @@ const SearchResults = new Lang.Class({
this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA }); this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders)); this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::enabled', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders)); this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders)); this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
@@ -435,7 +434,7 @@ const SearchResults = new Lang.Class({
this._unregisterProvider(provider); this._unregisterProvider(provider);
})); }));
RemoteSearch.loadRemoteSearchProviders(this._searchSettings, Lang.bind(this, function(providers) { RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) {
providers.forEach(Lang.bind(this, this._registerProvider)); providers.forEach(Lang.bind(this, this._registerProvider));
})); }));
}, },

View File

@@ -119,46 +119,23 @@ const ATIndicator = new Lang.Class({
_buildItem: function(string, schema, key) { _buildItem: function(string, schema, key) {
let settings = new Gio.Settings({ schema_id: schema }); let settings = new Gio.Settings({ schema_id: schema });
settings.connect('changed::'+key, Lang.bind(this, function() {
widget.setToggleState(settings.get_boolean(key));
this._queueSyncMenuVisibility();
}));
let widget = this._buildItemExtended(string, let widget = this._buildItemExtended(string,
settings.get_boolean(key), settings.get_boolean(key),
settings.is_writable(key), settings.is_writable(key),
function(enabled) { function(enabled) {
return settings.set_boolean(key, enabled); return settings.set_boolean(key, enabled);
}); });
settings.connect('changed::'+key, Lang.bind(this, function() {
widget.setToggleState(settings.get_boolean(key));
this._queueSyncMenuVisibility();
}));
return widget; return widget;
}, },
_buildHCItem: function() { _buildHCItem: function() {
let interfaceSettings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); let interfaceSettings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA });
let wmSettings = new Gio.Settings({ schema_id: WM_SCHEMA }); let wmSettings = new Gio.Settings({ schema_id: WM_SCHEMA });
interfaceSettings.connect('changed::' + KEY_GTK_THEME, Lang.bind(this, function() {
let value = interfaceSettings.get_string(KEY_GTK_THEME);
if (value == HIGH_CONTRAST_THEME) {
highContrast.setToggleState(true);
} else {
highContrast.setToggleState(false);
gtkTheme = value;
}
this._queueSyncMenuVisibility();
}));
interfaceSettings.connect('changed::' + KEY_ICON_THEME, function() {
let value = interfaceSettings.get_string(KEY_ICON_THEME);
if (value != HIGH_CONTRAST_THEME)
iconTheme = value;
});
wmSettings.connect('changed::' + KEY_WM_THEME, function() {
let value = wmSettings.get_string(KEY_WM_THEME);
if (value != HIGH_CONTRAST_THEME)
wmTheme = value;
});
let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME); let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME);
let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME); let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME);
let wmTheme = wmSettings.get_string(KEY_WM_THEME); let wmTheme = wmSettings.get_string(KEY_WM_THEME);
@@ -184,18 +161,32 @@ const ATIndicator = new Lang.Class({
wmSettings.reset(KEY_WM_THEME); wmSettings.reset(KEY_WM_THEME);
} }
}); });
interfaceSettings.connect('changed::' + KEY_GTK_THEME, Lang.bind(this, function() {
let value = interfaceSettings.get_string(KEY_GTK_THEME);
if (value == HIGH_CONTRAST_THEME) {
highContrast.setToggleState(true);
} else {
highContrast.setToggleState(false);
gtkTheme = value;
}
this._queueSyncMenuVisibility();
}));
interfaceSettings.connect('changed::' + KEY_ICON_THEME, function() {
let value = interfaceSettings.get_string(KEY_ICON_THEME);
if (value != HIGH_CONTRAST_THEME)
iconTheme = value;
});
wmSettings.connect('changed::' + KEY_WM_THEME, function() {
let value = wmSettings.get_string(KEY_WM_THEME);
if (value != HIGH_CONTRAST_THEME)
wmTheme = value;
});
return highContrast; return highContrast;
}, },
_buildFontItem: function() { _buildFontItem: function() {
let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA }); let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA });
settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, Lang.bind(this, function() {
let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
let active = (factor > 1.0);
widget.setToggleState(active);
this._queueSyncMenuVisibility();
}));
let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR); let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
let initial_setting = (factor > 1.0); let initial_setting = (factor > 1.0);
@@ -209,6 +200,13 @@ const ATIndicator = new Lang.Class({
else else
settings.reset(KEY_TEXT_SCALING_FACTOR); settings.reset(KEY_TEXT_SCALING_FACTOR);
}); });
settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, Lang.bind(this, function() {
let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
let active = (factor > 1.0);
widget.setToggleState(active);
this._queueSyncMenuVisibility();
}));
return widget; return widget;
} }
}); });

View File

@@ -46,7 +46,7 @@ const Indicator = new Lang.Class({
// The Bluetooth menu only appears when Bluetooth is in use, // The Bluetooth menu only appears when Bluetooth is in use,
// so just statically build it with a "Turn Off" menu item. // so just statically build it with a "Turn Off" menu item.
this._item = new PopupMenu.PopupSubMenuMenuItem('', 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._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._proxy.BluetoothAirplaneMode = true; this._proxy.BluetoothAirplaneMode = true;
@@ -101,9 +101,8 @@ const Indicator = new Lang.Class({
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
if (nDevices > 0) if (nDevices > 0)
/* Translators: this is the number of connected bluetooth devices */ this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices);
this._item.label.text = ngettext("%d Connected", "%d Connected", nDevices).format(nDevices);
else else
this._item.label.text = _("Not In Use"); this._item.status.text = _("Not Connected");
}, },
}); });

View File

@@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang; const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@@ -19,6 +18,10 @@ const PanelMenu = imports.ui.panelMenu;
const SwitcherPopup = imports.ui.switcherPopup; const SwitcherPopup = imports.ui.switcherPopup;
const Util = imports.misc.util; const Util = imports.misc.util;
const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
const KEY_INPUT_SOURCES = 'sources';
const KEY_KEYBOARD_OPTIONS = 'xkb-options';
const INPUT_SOURCE_TYPE_XKB = 'xkb'; const INPUT_SOURCE_TYPE_XKB = 'xkb';
const INPUT_SOURCE_TYPE_IBUS = 'ibus'; const INPUT_SOURCE_TYPE_IBUS = 'ibus';
@@ -139,149 +142,6 @@ const InputSourceSwitcher = new Lang.Class({
} }
}); });
const InputSourceSettings = new Lang.Class({
Name: 'InputSourceSettings',
Abstract: true,
_emitInputSourcesChanged: function() {
this.emit('input-sources-changed');
},
_emitKeyboardOptionsChanged: function() {
this.emit('keyboard-options-changed');
},
_emitPerWindowChanged: function() {
this.emit('per-window-changed');
},
get inputSources() {
return [];
},
get keyboardOptions() {
return [];
},
get perWindow() {
return false;
}
});
Signals.addSignalMethods(InputSourceSettings.prototype);
const InputSourceSystemSettings = new Lang.Class({
Name: 'InputSourceSystemSettings',
Extends: InputSourceSettings,
_BUS_NAME: 'org.freedesktop.locale1',
_BUS_PATH: '/org/freedesktop/locale1',
_BUS_IFACE: 'org.freedesktop.locale1',
_BUS_PROPS_IFACE: 'org.freedesktop.DBus.Properties',
_init: function() {
this._layouts = '';
this._variants = '';
this._options = '';
this._reload();
Gio.DBus.system.signal_subscribe(this._BUS_NAME,
this._BUS_PROPS_IFACE,
'PropertiesChanged',
this._BUS_PATH,
null,
Gio.DBusSignalFlags.NONE,
Lang.bind(this, this._reload));
},
_reload: function() {
Gio.DBus.system.call(this._BUS_NAME,
this._BUS_PATH,
this._BUS_PROPS_IFACE,
'GetAll',
new GLib.Variant('(s)', [this._BUS_IFACE]),
null, Gio.DBusCallFlags.NONE, -1, null,
Lang.bind(this, function(conn, result) {
let props;
try {
props = conn.call_finish(result).deep_unpack()[0];
} catch(e) {
log('Could not get properties from ' + this._BUS_NAME);
return;
}
let layouts = props['X11Layout'].unpack();
let variants = props['X11Variant'].unpack();
let options = props['X11Options'].unpack();
if (layouts != this._layouts ||
variants != this._variants) {
this._layouts = layouts;
this._variants = variants;
this._emitInputSourcesChanged();
}
if (options != this._options) {
this._options = options;
this._emitKeyboardOptionsChanged();
}
}));
},
get inputSources() {
let sourcesList = [];
let layouts = this._layouts.split(',');
let variants = this._variants.split(',');
for (let i = 0; i < layouts.length && !!layouts[i]; i++) {
let id = layouts[i];
if (!!variants[i])
id += '+' + variants[i];
sourcesList.push({ type: INPUT_SOURCE_TYPE_XKB, id: id });
}
return sourcesList;
},
get keyboardOptions() {
return this._options.split(',');
}
});
const InputSourceSessionSettings = new Lang.Class({
Name: 'InputSourceSessionSettings',
Extends: InputSourceSettings,
_DESKTOP_INPUT_SOURCES_SCHEMA: 'org.gnome.desktop.input-sources',
_KEY_INPUT_SOURCES: 'sources',
_KEY_KEYBOARD_OPTIONS: 'xkb-options',
_KEY_PER_WINDOW: 'per-window',
_init: function() {
this._settings = new Gio.Settings({ schema_id: this._DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings.connect('changed::' + this._KEY_INPUT_SOURCES, Lang.bind(this, this._emitInputSourcesChanged));
this._settings.connect('changed::' + this._KEY_KEYBOARD_OPTIONS, Lang.bind(this, this._emitKeyboardOptionsChanged));
this._settings.connect('changed::' + this._KEY_PER_WINDOW, Lang.bind(this, this._emitPerWindowChanged));
},
get inputSources() {
let sourcesList = [];
let sources = this._settings.get_value(this._KEY_INPUT_SOURCES);
let nSources = sources.n_children();
for (let i = 0; i < nSources; i++) {
let [type, id] = sources.get_child_value(i).deep_unpack();
sourcesList.push({ type: type, id: id });
}
return sourcesList;
},
get keyboardOptions() {
return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS);
},
get perWindow() {
return this._settings.get_boolean(this._KEY_PER_WINDOW);
}
});
const InputSourceManager = new Lang.Class({ const InputSourceManager = new Lang.Class({
Name: 'InputSourceManager', Name: 'InputSourceManager',
@@ -295,11 +155,11 @@ const InputSourceManager = new Lang.Class({
this._ibusSources = {}; this._ibusSources = {};
this._currentSource = null; this._currentSource = null;
this._backupSource = null;
// All valid input sources currently in the gsettings // All valid input sources currently in the gsettings
// KEY_INPUT_SOURCES list ordered by most recently used // KEY_INPUT_SOURCES list ordered by most recently used
this._mruSources = []; this._mruSources = [];
this._mruSourcesBackup = null;
this._keybindingAction = this._keybindingAction =
Main.wm.addKeybinding('switch-input-source', Main.wm.addKeybinding('switch-input-source',
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }), new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
@@ -312,12 +172,9 @@ const InputSourceManager = new Lang.Class({
Meta.KeyBindingFlags.IS_REVERSED, Meta.KeyBindingFlags.IS_REVERSED,
Shell.ActionMode.ALL, Shell.ActionMode.ALL,
Lang.bind(this, this._switchInputSource)); Lang.bind(this, this._switchInputSource));
if (Main.sessionMode.isGreeter) this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings = new InputSourceSystemSettings(); this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
else this._settings.connect('changed::' + KEY_KEYBOARD_OPTIONS, Lang.bind(this, this._keyboardOptionsChanged));
this._settings = new InputSourceSessionSettings();
this._settings.connect('input-sources-changed', Lang.bind(this, this._inputSourcesChanged));
this._settings.connect('keyboard-options-changed', Lang.bind(this, this._keyboardOptionsChanged));
this._xkbInfo = KeyboardManager.getXkbInfo(); this._xkbInfo = KeyboardManager.getXkbInfo();
this._keyboardManager = KeyboardManager.getKeyboardManager(); this._keyboardManager = KeyboardManager.getKeyboardManager();
@@ -335,13 +192,13 @@ const InputSourceManager = new Lang.Class({
this._focusWindowNotifyId = 0; this._focusWindowNotifyId = 0;
this._overviewShowingId = 0; this._overviewShowingId = 0;
this._overviewHiddenId = 0; this._overviewHiddenId = 0;
this._settings.connect('per-window-changed', Lang.bind(this, this._sourcesPerWindowChanged)); this._settings.connect('changed::per-window', Lang.bind(this, this._sourcesPerWindowChanged));
this._sourcesPerWindowChanged(); this._sourcesPerWindowChanged();
this._disableIBus = false; this._disableIBus = false;
}, },
reload: function() { reload: function() {
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions); this._keyboardManager.setKeyboardOptions(this._settings.get_strv(KEY_KEYBOARD_OPTIONS));
this._inputSourcesChanged(); this._inputSourcesChanged();
}, },
@@ -396,7 +253,7 @@ const InputSourceManager = new Lang.Class({
}, },
_keyboardOptionsChanged: function() { _keyboardOptionsChanged: function() {
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions); this._keyboardManager.setKeyboardOptions(this._settings.get_strv(KEY_KEYBOARD_OPTIONS));
this._keyboardManager.reapply(); this._keyboardManager.reapply();
}, },
@@ -437,8 +294,8 @@ const InputSourceManager = new Lang.Class({
}, },
_inputSourcesChanged: function() { _inputSourcesChanged: function() {
let sources = this._settings.inputSources; let sources = this._settings.get_value(KEY_INPUT_SOURCES);
let nSources = sources.length; let nSources = sources.n_children();
this._inputSources = {}; this._inputSources = {};
this._ibusSources = {}; this._ibusSources = {};
@@ -447,8 +304,7 @@ const InputSourceManager = new Lang.Class({
for (let i = 0; i < nSources; i++) { for (let i = 0; i < nSources; i++) {
let displayName; let displayName;
let shortName; let shortName;
let type = sources[i].type; let [type, id] = sources.get_child_value(i).deep_unpack();
let id = sources[i].id;
let exists = false; let exists = false;
if (type == INPUT_SOURCE_TYPE_XKB) { if (type == INPUT_SOURCE_TYPE_XKB) {
@@ -516,11 +372,6 @@ const InputSourceManager = new Lang.Class({
this._keyboardManager.setUserLayouts(sourcesList.map(function(x) { return x.xkbId; })); this._keyboardManager.setUserLayouts(sourcesList.map(function(x) { return x.xkbId; }));
if (!this._disableIBus && this._mruSourcesBackup) {
this._mruSources = this._mruSourcesBackup;
this._mruSourcesBackup = null;
}
let mruSources = []; let mruSources = [];
for (let i = 0; i < this._mruSources.length; i++) { for (let i = 0; i < this._mruSources.length; i++) {
for (let j = 0; j < sourcesList.length; j++) for (let j = 0; j < sourcesList.length; j++)
@@ -532,8 +383,20 @@ const InputSourceManager = new Lang.Class({
} }
this._mruSources = mruSources.concat(sourcesList); this._mruSources = mruSources.concat(sourcesList);
if (this._mruSources.length > 0) if (this._mruSources.length > 0) {
if (!this._disableIBus && this._backupSource) {
for (let i = 0; i < this._mruSources.length; i++) {
if (this._mruSources[i].type == this._backupSource.type &&
this._mruSources[i].id == this._backupSource.id) {
let currentSource = this._mruSources.splice(i, 1);
this._mruSources = currentSource.concat(this._mruSources);
break;
}
}
this._backupSource = null;
}
this._mruSources[0].activate(); this._mruSources[0].activate();
}
// All ibus engines are preloaded here to reduce the launching time // All ibus engines are preloaded here to reduce the launching time
// when users switch the input sources. // when users switch the input sources.
@@ -598,12 +461,16 @@ const InputSourceManager = new Lang.Class({
if (this._disableIBus) if (this._disableIBus)
return; return;
this._disableIBus = true; this._disableIBus = true;
this._mruSourcesBackup = this._mruSources.slice(); this._backupSource = this._currentSource;
} else { } else {
if (!this._disableIBus) if (!this._disableIBus)
return; return;
this._disableIBus = false; this._disableIBus = false;
} }
// If this._mruSources is not cleared before this.reload() is called,
// the order is different from the original one as IM sources will
// be appended to XKB sources.
this._mruSources = [];
this.reload(); this.reload();
}, },
@@ -646,7 +513,7 @@ const InputSourceManager = new Lang.Class({
}, },
_sourcesPerWindowChanged: function() { _sourcesPerWindowChanged: function() {
this._sourcesPerWindow = this._settings.perWindow; this._sourcesPerWindow = this._settings.get_boolean('per-window');
if (this._sourcesPerWindow && this._focusWindowNotifyId == 0) { if (this._sourcesPerWindow && this._focusWindowNotifyId == 0) {
this._focusWindowNotifyId = global.display.connect('notify::focus-window', this._focusWindowNotifyId = global.display.connect('notify::focus-window',

View File

@@ -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('', true); this._item = new PopupMenu.PopupSubMenuMenuItem(_("Location"), 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.label.text = _("Location Enabled"); this._item.status.text = _("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,11 +173,10 @@ const Indicator = new Lang.Class({
_updateMenuLabels: function() { _updateMenuLabels: function() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED)) {
this._item.label.text = this._indicator.visible ? _("Location In Use") this._item.status.text = this._indicator.visible ? _("In Use") : _("Enabled");
: _("Location Enabled");
this._onOffAction.label.text = _("Disable"); this._onOffAction.label.text = _("Disable");
} else { } else {
this._item.label.text = _("Location Disabled"); this._item.status.text = _("Disabled");
this._onOffAction.label.text = _("Enable"); this._onOffAction.label.text = _("Enable");
} }
}, },

View File

@@ -257,8 +257,16 @@ 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.label.text = this._getStatus(); this.item.status.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() {
@@ -347,7 +355,6 @@ 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));
@@ -447,44 +454,38 @@ const NMConnectionDevice = new Lang.Class({
switch(this._device.state) { switch(this._device.state) {
case NetworkManager.DeviceState.DISCONNECTED: case NetworkManager.DeviceState.DISCONNECTED:
/* Translators: %s is a network identifier */ return _("Off");
return _("%s Off").format(this._getDescription());
case NetworkManager.DeviceState.ACTIVATED: case NetworkManager.DeviceState.ACTIVATED:
/* Translators: %s is a network identifier */ return _("Connected");
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) */
%s is a network identifier */ return _("Unmanaged");
return _("%s Unmanaged").format(this._getDescription());
case NetworkManager.DeviceState.DEACTIVATING: case NetworkManager.DeviceState.DEACTIVATING:
/* Translators: %s is a network identifier */ return _("Disconnecting");
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:
/* Translators: %s is a network identifier */ return _("Connecting");
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; %s is a network identifier */ /* Translators: this is for network connections that require some kind of key or password */
return _("%s Requires Authentication").format(this._getDescription()); return _("Authentication required");
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; %s is a network identifier */ module, which is missing */
return _("Firmware Missing For %s").format(this._getDescription()); return _("Firmware missing");
} }
/* 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; %s is a network identifier */ is disabled by rfkill, or it has no coverage */
return _("%s Unavailable").format(this._getDescription()); return _("Unavailable");
case NetworkManager.DeviceState.FAILED: case NetworkManager.DeviceState.FAILED:
/* Translators: %s is a network identifier */ return _("Connection failed");
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';
@@ -584,12 +585,11 @@ const NMDeviceModem = new Lang.Class({
_getStatus: function() { _getStatus: function() {
if (!this._client.wwan_hardware_enabled) if (!this._client.wwan_hardware_enabled)
/* Translators: %s is a network identifier */ return _("Hardware Disabled");
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); %s is a network identifier */ because it's disabled by rfkill (airplane mode) */
return _("%s Disabled").format(this._getDescription()); return _("Disabled");
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, 16, 16); this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
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,7 +917,10 @@ 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() {
@@ -1279,8 +1282,9 @@ 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._getStatus(); this.item.label.text = this._description;
}, },
setDeviceDescription: function(desc) { setDeviceDescription: function(desc) {
@@ -1292,23 +1296,18 @@ 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())
/* Translators: %s is a network identifier */ return _("Hotspot Active");
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)
/* Translators: %s is a network identifier */ return _("Connecting");
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)
/* Translators: %s is a network identifier */ return _("Hardware Disabled");
return _("%s Hardware Disabled").format(this._description);
else if (!this._client.wireless_enabled) else if (!this._client.wireless_enabled)
/* Translators: %s is a network identifier */ return _("Off");
return _("%s Off").format(this._description);
else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED) else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED)
/* Translators: %s is a network identifier */ return _("Not Connected");
return _("%s Not Connected").format(this._description);
else else
return ''; return '';
}, },
@@ -1510,7 +1509,7 @@ const NMVPNSection = new Lang.Class({
return item.getName(); return item.getName();
} }
return _("VPN Off"); return _("Off");
}, },
_getMenuIcon: function() { _getMenuIcon: function() {

View File

@@ -112,6 +112,12 @@ const Indicator = new Lang.Class({
this._item.icon.icon_name = icon; this._item.icon.icon_name = icon;
// The status label // The status label
this._item.label.text = this._getStatus(); this._item.status.text = this._getStatus();
// The sub-menu heading
if (this._proxy.Type == UPower.DeviceKind.UPS)
this._item.label.text = _("UPS");
else
this._item.label.text = _("Battery");
}, },
}); });

View File

@@ -85,8 +85,9 @@ 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 On"), true); this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode"), 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;
})); }));

View File

@@ -17,24 +17,15 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown'; const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen'; const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
const PRIVACY_SCHEMA = 'org.gnome.desktop.privacy'
const DISABLE_USER_SWITCH_KEY = 'disable-user-switching'; const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen'; const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
const DISABLE_LOG_OUT_KEY = 'disable-log-out'; const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const DISABLE_RESTART_KEY = 'disable-restart-buttons'; const DISABLE_RESTART_KEY = 'disable-restart-buttons';
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out'; const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
const SENSOR_BUS_NAME = 'net.hadess.SensorProxy';
const SENSOR_OBJECT_PATH = '/net/hadess/SensorProxy';
const SensorProxyInterface = '<node> \
<interface name="net.hadess.SensorProxy"> \
<property name="HasAccelerometer" type="b" access="read"/> \
</interface> \
</node>';
const SensorProxy = Gio.DBusProxy.makeProxyWrapper(SensorProxyInterface);
const AltSwitcher = new Lang.Class({ const AltSwitcher = new Lang.Class({
Name: 'AltSwitcher', Name: 'AltSwitcher',
@@ -104,8 +95,10 @@ const Indicator = new Lang.Class({
_init: function() { _init: function() {
this.parent(); this.parent();
this._screenSaverSettings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._privacySettings = new Gio.Settings({ schema_id: PRIVACY_SCHEMA });
this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' }); this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' });
this._session = new GnomeSession.SessionManager(); this._session = new GnomeSession.SessionManager();
@@ -136,7 +129,6 @@ const Indicator = new Lang.Class({
Lang.bind(this, this._updateMultiUser)); Lang.bind(this, this._updateMultiUser));
this._updateSwitchUser(); this._updateSwitchUser();
this._updateMultiUser(); this._updateMultiUser();
this._updateLockScreen();
// Whether shutdown is available or not depends on both lockdown // Whether shutdown is available or not depends on both lockdown
// settings (disable-log-out) and Polkit policy - the latter doesn't // settings (disable-log-out) and Polkit policy - the latter doesn't
@@ -155,32 +147,23 @@ const Indicator = new Lang.Class({
this._orientationSettings.connect('changed::orientation-lock', this._orientationSettings.connect('changed::orientation-lock',
Lang.bind(this, this._updateOrientationLock)); Lang.bind(this, this._updateOrientationLock));
Gio.DBus.system.watch_name(SENSOR_BUS_NAME, this._orientationExists = false;
Gio.BusNameWatcherFlags.NONE, Gio.DBus.session.watch_name('org.gnome.SettingsDaemon.Orientation',
Lang.bind(this, this._sensorProxyAppeared), Gio.BusNameWatcherFlags.NONE,
Lang.bind(this, function() { Lang.bind(this, function() {
this._sensorProxy = null; this._orientationExists = true;
this._updateOrientationLock(); this._updateOrientationLock();
})); }),
Lang.bind(this, function() {
this._orientationExists = false;
this._updateOrientationLock();
}));
this._updateOrientationLock(); this._updateOrientationLock();
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated)); Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated(); this._sessionUpdated();
}, },
_sensorProxyAppeared: function() {
this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
this._sensorProxy.connect('g-properties-changed',
Lang.bind(this, this._updateOrientationLock));
this._updateOrientationLock();
}));
},
_updateActionsVisibility: function() { _updateActionsVisibility: function() {
let visible = (this._settingsAction.visible || let visible = (this._settingsAction.visible ||
this._orientationLockAction.visible || this._orientationLockAction.visible ||
@@ -251,22 +234,13 @@ 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');
} }
}, },
_updateOrientationLock: function() { _updateOrientationLock: function() {
if (this._sensorProxy) this._orientationLockAction.visible = this._orientationExists;
this._orientationLockAction.visible = this._sensorProxy.HasAccelerometer;
else
this._orientationLockAction.visible = false;
let locked = this._orientationSettings.get_boolean('orientation-lock'); let locked = this._orientationSettings.get_boolean('orientation-lock');
let icon = this._orientationLockAction.child; let icon = this._orientationLockAction.child;
@@ -350,9 +324,6 @@ 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));

View File

@@ -465,12 +465,6 @@ 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;
@@ -478,7 +472,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 false; return symbol == Clutter.BackSpace && this._searchActive;
}, },
startSearch: function(event) { startSearch: function(event) {

View File

@@ -11,8 +11,7 @@ const WindowAttentionHandler = new Lang.Class({
_init : function() { _init : function() {
this._tracker = Shell.WindowTracker.get_default(); this._tracker = Shell.WindowTracker.get_default();
this._windowDemandsAttentionId = global.display.connect('window-demands-attention', global.display.connect('window-demands-attention', Lang.bind(this, this._onWindowDemandsAttention));
Lang.bind(this, this._onWindowDemandsAttention));
}, },
_getTitleAndBanner: function(app, window) { _getTitleAndBanner: function(app, window) {

View File

@@ -19,6 +19,8 @@ const Tweener = imports.ui.tweener;
const WindowMenu = imports.ui.windowMenu; const WindowMenu = imports.ui.windowMenu;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
const MAXIMIZE_WINDOW_ANIMATION_TIME = 0.15;
const UNMAXIMIZE_WINDOW_ANIMATION_TIME = 0.15;
const MINIMIZE_WINDOW_ANIMATION_TIME = 0.2; const MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
const SHOW_WINDOW_ANIMATION_TIME = 0.15; const SHOW_WINDOW_ANIMATION_TIME = 0.15;
const DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1; const DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1;
@@ -81,10 +83,12 @@ 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');
@@ -193,8 +197,6 @@ const WorkspaceTracker = new Lang.Class({
this._workspaces = []; this._workspaces = [];
this._checkWorkspacesId = 0; this._checkWorkspacesId = 0;
this._pauseWorkspaceCheck = false;
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
tracker.connect('startup-sequence-changed', Lang.bind(this, this._queueCheckWorkspaces)); tracker.connect('startup-sequence-changed', Lang.bind(this, this._queueCheckWorkspaces));
@@ -213,20 +215,11 @@ const WorkspaceTracker = new Lang.Class({
_getWorkspaceSettings: function() { _getWorkspaceSettings: function() {
let settings = global.get_overrides_settings(); let settings = global.get_overrides_settings();
if (settings && if (settings.list_keys().indexOf('dynamic-workspaces') > -1)
settings.settings_schema.list_keys().indexOf('dynamic-workspaces') > -1)
return settings; return settings;
return new Gio.Settings({ schema_id: 'org.gnome.mutter' }); return new Gio.Settings({ schema_id: 'org.gnome.mutter' });
}, },
blockUpdates: function() {
this._pauseWorkspaceCheck = true;
},
unblockUpdates: function() {
this._pauseWorkspaceCheck = false;
},
_checkWorkspaces: function() { _checkWorkspaces: function() {
let i; let i;
let emptyWorkspaces = []; let emptyWorkspaces = [];
@@ -236,10 +229,6 @@ const WorkspaceTracker = new Lang.Class({
return false; return false;
} }
// Update workspaces only if Dynamic Workspace Management has not been paused by some other function
if (this._pauseWorkspaceCheck)
return true;
for (i = 0; i < this._workspaces.length; i++) { for (i = 0; i < this._workspaces.length; i++) {
let lastRemoved = this._workspaces[i]._lastRemovedWindow; let lastRemoved = this._workspaces[i]._lastRemovedWindow;
if ((lastRemoved && if ((lastRemoved &&
@@ -475,100 +464,52 @@ 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.GestureAction,
_init : function() { _init : function() {
const MOTION_THRESHOLD = 50;
this.parent(); this.parent();
this.set_n_touch_points(4); this.set_n_touch_points(4);
this.set_threshold_trigger_distance(MOTION_THRESHOLD, MOTION_THRESHOLD);
global.display.connect('grab-op-begin', Lang.bind(this, function() { global.display.connect('grab-op-begin', Lang.bind(this, function() {
this.cancel(); this.cancel();
})); }));
}, },
vfunc_gesture_prepare : function(actor) { vfunc_gesture_prepare : function(action, actor) {
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW; let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
return this.get_n_current_points() == this.get_n_touch_points() &&
if (!this.parent(actor)) (allowedModes & Main.actionMode);
return false;
return (allowedModes & Main.actionMode);
}, },
vfunc_swept : function(actor, direction) { vfunc_gesture_end : function(action, actor) {
let dir; const MOTION_THRESHOLD = 50;
if (direction & Clutter.SwipeDirection.UP) // Just check one touchpoint here
dir = Meta.MotionDirection.DOWN; let [startX, startY] = this.get_press_coords(0);
else if (direction & Clutter.SwipeDirection.DOWN) let [x, y] = this.get_motion_coords(0);
dir = Meta.MotionDirection.UP; let offsetX = x - startX;
else if (direction & Clutter.SwipeDirection.LEFT) let offsetY = y - startY;
dir = Meta.MotionDirection.RIGHT; let direction;
else if (direction & Clutter.SwipeDirection.RIGHT)
dir = Meta.MotionDirection.LEFT;
this.emit('activated', dir); if (Math.abs(offsetX) < MOTION_THRESHOLD &&
Math.abs(offsetY) < MOTION_THRESHOLD)
return;
if (Math.abs(offsetY) > Math.abs(offsetX)) {
if (offsetY > 0)
direction = Meta.MotionDirection.UP;
else
direction = Meta.MotionDirection.DOWN;
} else {
if (offsetX > 0)
direction = Meta.MotionDirection.LEFT;
else
direction = Meta.MotionDirection.RIGHT;
}
this.emit('activated', direction);
} }
}); });
Signals.addSignalMethods(WorkspaceSwitchAction.prototype); Signals.addSignalMethods(WorkspaceSwitchAction.prototype);
@@ -676,6 +617,8 @@ const WindowManager = new Lang.Class({
this._minimizing = []; this._minimizing = [];
this._unminimizing = []; this._unminimizing = [];
this._maximizing = [];
this._unmaximizing = [];
this._mapping = []; this._mapping = [];
this._destroying = []; this._destroying = [];
this._movingWindow = null; this._movingWindow = null;
@@ -684,12 +627,12 @@ const WindowManager = new Lang.Class({
this._allowedKeybindings = {}; this._allowedKeybindings = {};
this._isWorkspacePrepended = false;
this._switchData = null; this._switchData = null;
this._shellwm.connect('kill-switch-workspace', Lang.bind(this, this._switchWorkspaceDone)); this._shellwm.connect('kill-switch-workspace', Lang.bind(this, this._switchWorkspaceDone));
this._shellwm.connect('kill-window-effects', Lang.bind(this, function (shellwm, actor) { this._shellwm.connect('kill-window-effects', Lang.bind(this, function (shellwm, actor) {
this._minimizeWindowDone(shellwm, actor); this._minimizeWindowDone(shellwm, actor);
this._maximizeWindowDone(shellwm, actor);
this._unmaximizeWindowDone(shellwm, actor);
this._mapWindowDone(shellwm, actor); this._mapWindowDone(shellwm, actor);
this._destroyWindowDone(shellwm, actor); this._destroyWindowDone(shellwm, actor);
})); }));
@@ -700,7 +643,8 @@ const WindowManager = new Lang.Class({
this._shellwm.connect('show-window-menu', Lang.bind(this, this._showWindowMenu)); this._shellwm.connect('show-window-menu', Lang.bind(this, this._showWindowMenu));
this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow)); this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow));
this._shellwm.connect('unminimize', Lang.bind(this, this._unminimizeWindow)); this._shellwm.connect('unminimize', Lang.bind(this, this._unminimizeWindow));
this._shellwm.connect('size-change', Lang.bind(this, this._sizeChangeWindow)); this._shellwm.connect('maximize', Lang.bind(this, this._maximizeWindow));
this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow));
this._shellwm.connect('map', Lang.bind(this, this._mapWindow)); this._shellwm.connect('map', Lang.bind(this, this._mapWindow));
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow)); this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding)); this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding));
@@ -920,22 +864,15 @@ 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, this._actionSwitchWorkspace)); gesture.connect('activated', Lang.bind(this, function(action, direction) {
let newWs = global.screen.get_active_workspace().get_neighbor(direction);
this.actionMoveWorkspace(newWs);
}));
global.stage.add_action(gesture); 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) {
@@ -978,8 +915,6 @@ const WindowManager = new Lang.Class({
if (!Meta.prefs_get_dynamic_workspaces()) if (!Meta.prefs_get_dynamic_workspaces())
return; return;
global.screen.append_new_workspace(false, global.get_current_time());
let windows = global.get_window_actors().map(function(winActor) { let windows = global.get_window_actors().map(function(winActor) {
return winActor.meta_window; return winActor.meta_window;
}); });
@@ -1217,8 +1152,22 @@ const WindowManager = new Lang.Class({
} }
}, },
_sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
shellwm.completed_size_change(actor); _maximizeWindow : function(shellwm, actor, targetX, targetY, targetWidth, targetHeight) {
shellwm.completed_maximize(actor);
},
_maximizeWindowDone : function(shellwm, actor) {
},
_maximizeWindowOverwrite : function(shellwm, actor) {
},
_unmaximizeWindow : function(shellwm, actor, targetX, targetY, targetWidth, targetHeight) {
shellwm.completed_unmaximize(actor);
},
_unmaximizeWindowDone : function(shellwm, actor) {
}, },
_hasAttachedDialogs: function(window, ignoreWindow) { _hasAttachedDialogs: function(window, ignoreWindow) {
@@ -1677,26 +1626,14 @@ const WindowManager = new Lang.Class({
let newWs; let newWs;
let direction; let direction;
if (action == 'move') {
// "Moving" a window to another workspace doesn't make sense when
// it cannot be unstuck, and is potentially confusing if a new
// workspaces is added at the start/end
if (window.is_always_on_all_workspaces() ||
(Meta.prefs_get_workspaces_only_on_primary() &&
window.get_monitor() != Main.layoutManager.primaryIndex))
return;
}
if (target == 'last') { if (target == 'last') {
direction = Meta.MotionDirection.DOWN; direction = Meta.MotionDirection.DOWN;
newWs = screen.get_workspace_by_index(screen.n_workspaces - 1); newWs = screen.get_workspace_by_index(screen.n_workspaces - 1);
} else if (isNaN(target)) { } else if (isNaN(target)) {
// Prepend a new workspace dynamically // Prepend a new workspace dynamically
if (screen.get_active_workspace_index() == 0 && if (screen.get_active_workspace_index() == 0 &&
action == 'move' && target == 'up' && this._isWorkspacePrepended == false) { action == 'move' && target == 'up')
this.insertWorkspace(0); this.insertWorkspace(0);
this._isWorkspacePrepended = true;
}
direction = Meta.MotionDirection[target.toUpperCase()]; direction = Meta.MotionDirection[target.toUpperCase()];
newWs = screen.get_active_workspace().get_neighbor(direction); newWs = screen.get_active_workspace().get_neighbor(direction);
@@ -1721,12 +1658,9 @@ const WindowManager = new Lang.Class({
if (!Main.overview.visible) { if (!Main.overview.visible) {
if (this._workspaceSwitcherPopup == null) { if (this._workspaceSwitcherPopup == null) {
this._workspaceTracker.blockUpdates();
this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup(); this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup();
this._workspaceSwitcherPopup.connect('destroy', Lang.bind(this, function() { this._workspaceSwitcherPopup.connect('destroy', Lang.bind(this, function() {
this._workspaceTracker.unblockUpdates();
this._workspaceSwitcherPopup = null; this._workspaceSwitcherPopup = null;
this._isWorkspacePrepended = false;
})); }));
} }
this._workspaceSwitcherPopup.display(direction, newWs.index()); this._workspaceSwitcherPopup.display(direction, newWs.index());

View File

@@ -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.CHECK); item.setOrnament(PopupMenu.Ornament.DOT);
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.CHECK); item.setOrnament(PopupMenu.Ornament.DOT);
if (window.is_always_on_all_workspaces()) if (window.is_always_on_all_workspaces())
item.setSensitive(false); item.setSensitive(false);
@@ -101,22 +101,13 @@ const WindowMenu = new Lang.Class({
if (!isSticky) { if (!isSticky) {
let workspace = window.get_workspace(); let workspace = window.get_workspace();
if (workspace != workspace.get_neighbor(Meta.MotionDirection.LEFT)) { let idx = workspace.index();
this.addAction(_("Move to Workspace Left"), Lang.bind(this, function(event) { if (idx > 0) {
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.LEFT));
}));
}
if (workspace != workspace.get_neighbor(Meta.MotionDirection.RIGHT)) {
this.addAction(_("Move to Workspace Right"), Lang.bind(this, function(event) {
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.RIGHT));
}));
}
if (workspace != workspace.get_neighbor(Meta.MotionDirection.UP)) {
this.addAction(_("Move to Workspace Up"), Lang.bind(this, function(event) { this.addAction(_("Move to Workspace Up"), Lang.bind(this, function(event) {
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.UP)); window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.UP));
})); }));
} }
if (workspace != workspace.get_neighbor(Meta.MotionDirection.DOWN)) { if (idx < nWorkspaces) {
this.addAction(_("Move to Workspace Down"), Lang.bind(this, function(event) { this.addAction(_("Move to Workspace Down"), Lang.bind(this, function(event) {
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.DOWN)); window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.DOWN));
})); }));
@@ -124,39 +115,6 @@ const WindowMenu = new Lang.Class({
} }
} }
let screen = global.screen;
let nMonitors = screen.get_n_monitors();
if (nMonitors > 1) {
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
let monitorIndex = window.get_monitor();
let upMonitorIndex = screen.get_monitor_neighbor_index(monitorIndex, Meta.ScreenDirection.UP);
if (upMonitorIndex != -1) {
this.addAction(_("Move to Monitor Up"), Lang.bind(this, function(event) {
window.move_to_monitor(upMonitorIndex);
}));
}
let downMonitorIndex = screen.get_monitor_neighbor_index(monitorIndex, Meta.ScreenDirection.DOWN);
if (downMonitorIndex != -1) {
this.addAction(_("Move to Monitor Down"), Lang.bind(this, function(event) {
window.move_to_monitor(downMonitorIndex);
}));
}
let leftMonitorIndex = screen.get_monitor_neighbor_index(monitorIndex, Meta.ScreenDirection.LEFT);
if (leftMonitorIndex != -1) {
this.addAction(_("Move to Monitor Left"), Lang.bind(this, function(event) {
window.move_to_monitor(leftMonitorIndex);
}));
}
let rightMonitorIndex = screen.get_monitor_neighbor_index(monitorIndex, Meta.ScreenDirection.RIGHT);
if (rightMonitorIndex != -1) {
this.addAction(_("Move to Monitor Right"), Lang.bind(this, function(event) {
window.move_to_monitor(rightMonitorIndex);
}));
}
}
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
item = this.addAction(_("Close"), Lang.bind(this, function(event) { item = this.addAction(_("Close"), Lang.bind(this, function(event) {
@@ -209,10 +167,6 @@ const WindowMenuManager = new Lang.Class({
menu.connect('activate', function() { menu.connect('activate', function() {
window.check_alive(global.get_current_time()); window.check_alive(global.get_current_time());
}); });
let destroyId = window.connect('unmanaged',
function() {
menu.close();
});
this._sourceActor.set_size(rect.width, rect.height); this._sourceActor.set_size(rect.width, rect.height);
this._sourceActor.set_position(rect.x, rect.y); this._sourceActor.set_position(rect.x, rect.y);
@@ -226,7 +180,6 @@ const WindowMenuManager = new Lang.Class({
this._sourceActor.hide(); this._sourceActor.hide();
menu.destroy(); menu.destroy();
window.disconnect(destroyId);
})); }));
} }
}); });

View File

@@ -97,6 +97,8 @@ const WorkspacesView = new Lang.Class({
this._scrolling = false; // swipe-scrolling this._scrolling = false; // swipe-scrolling
this._animatingScroll = false; // programatically updating the adjustment this._animatingScroll = false; // programatically updating the adjustment
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
let activeWorkspaceIndex = global.screen.get_active_workspace_index(); let activeWorkspaceIndex = global.screen.get_active_workspace_index();
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex, this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
lower: 0, lower: 0,
@@ -416,7 +418,7 @@ const WorkspacesDisplay = new Lang.Class({
this.actor.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesActualGeometry)); this.actor.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesActualGeometry));
this.actor.connect('parent-set', Lang.bind(this, this._parentSet)); this.actor.connect('parent-set', Lang.bind(this, this._parentSet));
let clickAction = new Clutter.ClickAction(); let clickAction = new Clutter.ClickAction()
clickAction.connect('clicked', Lang.bind(this, function(action) { clickAction.connect('clicked', Lang.bind(this, function(action) {
// 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
@@ -462,7 +464,6 @@ const WorkspacesDisplay = new Lang.Class({
this._notifyOpacityId = 0; this._notifyOpacityId = 0;
this._scrollEventId = 0; this._scrollEventId = 0;
this._keyPressEventId = 0;
this._fullGeometry = null; this._fullGeometry = null;
}, },
@@ -494,9 +495,6 @@ const WorkspacesDisplay = new Lang.Class({
Lang.bind(this, this._onRestacked)); Lang.bind(this, this._onRestacked));
if (this._scrollEventId == 0) if (this._scrollEventId == 0)
this._scrollEventId = Main.overview.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); this._scrollEventId = Main.overview.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
if (this._keyPressEventId == 0)
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
}, },
animateFromOverview: function(fadeOnPrimary) { animateFromOverview: function(fadeOnPrimary) {
@@ -519,10 +517,7 @@ const WorkspacesDisplay = new Lang.Class({
Main.overview.disconnect(this._scrollEventId); Main.overview.disconnect(this._scrollEventId);
this._scrollEventId = 0; this._scrollEventId = 0;
} }
if (this._keyPressEventId > 0) {
global.stage.disconnect(this._keyPressEventId);
this._keyPressEventId = 0;
}
for (let i = 0; i < this._workspacesViews.length; i++) for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].destroy(); this._workspacesViews[i].destroy();
this._workspacesViews = []; this._workspacesViews = [];
@@ -675,25 +670,6 @@ const WorkspacesDisplay = new Lang.Class({
} }
Main.wm.actionMoveWorkspace(ws); Main.wm.actionMoveWorkspace(ws);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
},
_onKeyPressEvent: function(actor, event) {
if (!this.actor.mapped)
return Clutter.EVENT_PROPAGATE;
let activeWs = global.screen.get_active_workspace();
let ws;
switch (event.get_key_symbol()) {
case Clutter.KEY_Page_Up:
ws = activeWs.get_neighbor(Meta.MotionDirection.UP);
break;
case Clutter.KEY_Page_Down:
ws = activeWs.get_neighbor(Meta.MotionDirection.DOWN);
break;
default:
return Clutter.EVENT_PROPAGATE;
}
Main.wm.actionMoveWorkspace(ws);
return Clutter.EVENT_STOP;
} }
}); });
Signals.addSignalMethods(WorkspacesDisplay.prototype); Signals.addSignalMethods(WorkspacesDisplay.prototype);

View File

@@ -50,7 +50,6 @@ nb
ne ne
nl nl
nn nn
oc
or or
pa pa
pl pl

1167
po/an.po

File diff suppressed because it is too large Load Diff

1052
po/ar.po

File diff suppressed because it is too large Load Diff

614
po/ca.po

File diff suppressed because it is too large Load Diff

514
po/cs.po

File diff suppressed because it is too large Load Diff

708
po/de.po

File diff suppressed because it is too large Load Diff

523
po/el.po

File diff suppressed because it is too large Load Diff

5538
po/es.po

File diff suppressed because it is too large Load Diff

965
po/eu.po

File diff suppressed because it is too large Load Diff

1644
po/fa.po

File diff suppressed because it is too large Load Diff

633
po/fi.po

File diff suppressed because it is too large Load Diff

1107
po/fr.po

File diff suppressed because it is too large Load Diff

1066
po/fur.po

File diff suppressed because it is too large Load Diff

1112
po/gl.po

File diff suppressed because it is too large Load Diff

642
po/he.po

File diff suppressed because it is too large Load Diff

542
po/hu.po

File diff suppressed because it is too large Load Diff

950
po/id.po

File diff suppressed because it is too large Load Diff

994
po/is.po

File diff suppressed because it is too large Load Diff

597
po/it.po

File diff suppressed because it is too large Load Diff

1142
po/ja.po

File diff suppressed because it is too large Load Diff

519
po/kk.po

File diff suppressed because it is too large Load Diff

509
po/ko.po

File diff suppressed because it is too large Load Diff

543
po/lt.po

File diff suppressed because it is too large Load Diff

1513
po/lv.po

File diff suppressed because it is too large Load Diff

565
po/nb.po

File diff suppressed because it is too large Load Diff

1663
po/nl.po

File diff suppressed because it is too large Load Diff

2487
po/oc.po

File diff suppressed because it is too large Load Diff

558
po/pa.po

File diff suppressed because it is too large Load Diff

528
po/pl.po

File diff suppressed because it is too large Load Diff

1758
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

667
po/ru.po

File diff suppressed because it is too large Load Diff

800
po/sk.po

File diff suppressed because it is too large Load Diff

168
po/sl.po
View File

@@ -9,18 +9,18 @@ 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-07-08 08:07+0000\n" "POT-Creation-Date: 2015-03-15 08:36+0000\n"
"PO-Revision-Date: 2015-07-08 15:46+0100\n" "PO-Revision-Date: 2015-03-15 09:41+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: Slovenian\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=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n" "%100==4 ? 3 : 0);\n"
"X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 1.7.5\n" "X-Generator: Poedit 1.5.4\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@@ -302,12 +302,12 @@ msgstr ""
msgid "Network Login" msgid "Network Login"
msgstr "Omrežna prijava" msgstr "Omrežna prijava"
#: ../js/extensionPrefs/main.js:122 #: ../js/extensionPrefs/main.js:123
#, 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 "Prišlo je do napake med nalaganjem pogovornega okna z možnosti za %s:" msgstr "Prišlo je do napake med nalaganjem pogovornega okna z možnosti za %s:"
#: ../js/extensionPrefs/main.js:154 #: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "Razširitve lupine Gnome" msgstr "Razširitve lupine Gnome"
@@ -318,39 +318,39 @@ msgstr "Razširitve lupine Gnome"
msgid "Cancel" msgid "Cancel"
msgstr "Prekliči" msgstr "Prekliči"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
msgid "Next" msgid "Next"
msgstr "Naslednji" msgstr "Naslednji"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403 #: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59 #: ../js/ui/unlockDialog.js:59
msgid "Unlock" msgid "Unlock"
msgstr "Odkleni" msgstr "Odkleni"
#: ../js/gdm/authPrompt.js:213 #: ../js/gdm/authPrompt.js:215
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Prijava" msgstr "Prijava"
#: ../js/gdm/loginDialog.js:281 #: ../js/gdm/loginDialog.js:280
msgid "Choose Session" msgid "Choose Session"
msgstr "Izbor seje" msgstr "Izbor seje"
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:421
msgid "Not listed?" msgid "Not listed?"
msgstr "Ali je ni na seznamu?" msgstr "Ali je ni na seznamu?"
#: ../js/gdm/loginDialog.js:847 #: ../js/gdm/loginDialog.js:830
#, 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:852 ../js/ui/components/networkAgent.js:271 #: ../js/gdm/loginDialog.js:835 ../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:1180 #: ../js/gdm/loginDialog.js:1170
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:789 #: ../js/ui/appDisplay.js:792
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:909 #: ../js/ui/appDisplay.js:912
msgid "Frequent" msgid "Frequent"
msgstr "Pogosto" msgstr "Pogosto"
#: ../js/ui/appDisplay.js:916 #: ../js/ui/appDisplay.js:919
msgid "All" msgid "All"
msgstr "Vse" msgstr "Vse"
#: ../js/ui/appDisplay.js:1845 #: ../js/ui/appDisplay.js:1850
msgid "New Window" msgid "New Window"
msgstr "Novo okno" msgstr "Novo okno"
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1878 ../js/ui/dash.js:291
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Odstrani iz priljubljenih" msgstr "Odstrani iz priljubljenih"
#: ../js/ui/appDisplay.js:1879 #: ../js/ui/appDisplay.js:1884
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Dodaj med priljubljene" msgstr "Dodaj med priljubljene"
#: ../js/ui/appDisplay.js:1889 #: ../js/ui/appDisplay.js:1894
msgid "Show Details" msgid "Show Details"
msgstr "Pokaži besedilo" msgstr "Pokaži besedilo"
@@ -481,19 +481,15 @@ msgstr "Program \"%s\" je dodan med priljubljeno."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "Program \"%s\" je odstranjen iz priljubljenih." msgstr "Program \"%s\" je odstranjen iz priljubljenih."
#: ../js/ui/backgroundMenu.js:19 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650
msgid "Change Background…" #: ../js/ui/status/system.js:337
msgstr "Spremeni ozadje ..."
#: ../js/ui/backgroundMenu.js:21
msgid "Display Settings"
msgstr "Nastavitve zaslona"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
#: ../js/ui/status/system.js:357
msgid "Settings" msgid "Settings"
msgstr "Nastavitve" msgstr "Nastavitve"
#: ../js/ui/backgroundMenu.js:21
msgid "Change Background…"
msgstr "Spremeni ozadje ..."
#. 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"
@@ -546,53 +542,53 @@ msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#: ../js/ui/calendar.js:564 #: ../js/ui/calendar.js:563
msgid "Previous month" msgid "Previous month"
msgstr "Predhodni mesec" msgstr "Predhodni mesec"
#: ../js/ui/calendar.js:574 #: ../js/ui/calendar.js:573
msgid "Next month" msgid "Next month"
msgstr "Naslednji mesec" msgstr "Naslednji mesec"
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:780
msgid "Week %V" msgid "Week %V"
msgstr "Teden %V" msgstr "Teden %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:1187 #: ../js/ui/calendar.js:1182
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Celodnevno" msgstr "Celodnevno"
#: ../js/ui/calendar.js:1289 #: ../js/ui/calendar.js:1288
msgid "Clear section" msgid "Clear section"
msgstr "Počisti odsek" msgstr "Počisti odsek"
#: ../js/ui/calendar.js:1516 #: ../js/ui/calendar.js:1515
msgid "Events" msgid "Events"
msgstr "Dogodki" msgstr "Dogodki"
#: ../js/ui/calendar.js:1525 #: ../js/ui/calendar.js:1524
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d. %m." msgstr "%A, %d. %m."
#: ../js/ui/calendar.js:1529 #: ../js/ui/calendar.js:1528
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d %B %Y" msgstr "%A, %d %B %Y"
#: ../js/ui/calendar.js:1614 #: ../js/ui/calendar.js:1613
msgid "Notifications" msgid "Notifications"
msgstr "Obvestila" msgstr "Obvestila"
#: ../js/ui/calendar.js:1765 #: ../js/ui/calendar.js:1764
msgid "No Notifications" msgid "No Notifications"
msgstr "Ni obvestil" msgstr "Ni obvestil"
#: ../js/ui/calendar.js:1768 #: ../js/ui/calendar.js:1767
msgid "No Events" msgid "No Events"
msgstr "Ni dogodkov" msgstr "Ni dogodkov"
@@ -728,7 +724,7 @@ msgstr "Dejanje je spodletelo. Poskusite znova."
#. 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:757 #: ../js/ui/components/telepathyClient.js:775
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s je sedaj znan kot v %s" msgstr "%s je sedaj znan kot v %s"
@@ -737,11 +733,11 @@ msgstr "%s je sedaj znan kot v %s"
msgid "Windows" msgid "Windows"
msgstr "Okna" msgstr "Okna"
#: ../js/ui/dash.js:250 ../js/ui/dash.js:291 #: ../js/ui/dash.js:252 ../js/ui/dash.js:293
msgid "Show Applications" msgid "Show Applications"
msgstr "Pokaži programe" msgstr "Pokaži programe"
#: ../js/ui/dash.js:449 #: ../js/ui/dash.js:453
msgid "Dash" msgid "Dash"
msgstr "Pregledna plošča" msgstr "Pregledna plošča"
@@ -920,16 +916,16 @@ 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:747 ../js/ui/status/keyboard.js:713 #: ../js/ui/keyboard.js:714 ../js/ui/status/keyboard.js:580
msgid "Keyboard" msgid "Keyboard"
msgstr "Tipkovnica" msgstr "Tipkovnica"
#. translators: 'Hide' is a verb */ #. translators: 'Hide' is a verb */
#: ../js/ui/legacyTray.js:66 #: ../js/ui/legacyTray.js:64
msgid "Hide tray" msgid "Hide tray"
msgstr "Skrij sistemsko vrstico" msgstr "Skrij sistemsko vrstico"
#: ../js/ui/legacyTray.js:107 #: ../js/ui/legacyTray.js:104
msgid "Status Icons" msgid "Status Icons"
msgstr "Ikone stanja" msgstr "Ikone stanja"
@@ -985,7 +981,7 @@ msgstr "Poglej vir"
msgid "Web Page" msgid "Web Page"
msgstr "Spletna stran" msgstr "Spletna stran"
#: ../js/ui/messageTray.js:1486 #: ../js/ui/messageTray.js:2133
msgid "System Information" msgid "System Information"
msgstr "Podrobnosti sistema" msgstr "Podrobnosti sistema"
@@ -1027,7 +1023,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:162 #: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:120
msgid "Close" msgid "Close"
msgstr "Zapri" msgstr "Zapri"
@@ -1059,27 +1055,27 @@ 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:365 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Zakleni" msgstr "Zakleni"
#: ../js/ui/screenShield.js:684 #: ../js/ui/screenShield.js:668
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:805 ../js/ui/screenShield.js:1271 #: ../js/ui/screenShield.js:795 ../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:806 ../js/ui/screenShield.js:1272 #: ../js/ui/screenShield.js:796 ../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"
#: ../js/ui/search.js:617 #: ../js/ui/search.js:616
msgid "Searching…" msgid "Searching…"
msgstr "Iskanje ..." msgstr "Iskanje ..."
#: ../js/ui/search.js:619 #: ../js/ui/search.js:618
msgid "No results." msgid "No results."
msgstr "Ni najdenih zadetkov." msgstr "Ni najdenih zadetkov."
@@ -1143,11 +1139,11 @@ msgstr "Odskočne tipke"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Miškine tipke" msgstr "Miškine tipke"
#: ../js/ui/status/accessibility.js:167 #: ../js/ui/status/accessibility.js:144
msgid "High Contrast" msgid "High Contrast"
msgstr "Visok kontrast" msgstr "Visok kontrast"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:193
msgid "Large Text" msgid "Large Text"
msgstr "Veliko besedilo" msgstr "Veliko besedilo"
@@ -1183,7 +1179,7 @@ msgstr "Ni vzpostavljene povezave"
msgid "Brightness" msgid "Brightness"
msgstr "Svetlost" msgstr "Svetlost"
#: ../js/ui/status/keyboard.js:736 #: ../js/ui/status/keyboard.js:603
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Pokaži razporeditev tipkovnice" msgstr "Pokaži razporeditev tipkovnice"
@@ -1394,23 +1390,23 @@ msgstr "Način letala"
msgid "On" msgid "On"
msgstr "Povezano" msgstr "Povezano"
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Preklopi uporabnika" msgstr "Preklopi uporabnika"
#: ../js/ui/status/system.js:342 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Odjava" msgstr "Odjava"
#: ../js/ui/status/system.js:361 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Zaklep položaja" msgstr "Zaklep položaja"
#: ../js/ui/status/system.js:369 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Zaustavi" msgstr "Zaustavi"
#: ../js/ui/status/system.js:372 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Izklop" msgstr "Izklop"
@@ -1442,27 +1438,27 @@ msgstr "Programi"
msgid "Search" msgid "Search"
msgstr "Poišči" msgstr "Poišči"
#: ../js/ui/windowAttentionHandler.js:20 #: ../js/ui/windowAttentionHandler.js:19
#, 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:63 #: ../js/ui/windowManager.js:65
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:82 #: ../js/ui/windowManager.js:84
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Povrni nastavitve" msgstr "Povrni nastavitve"
#: ../js/ui/windowManager.js:86 #: ../js/ui/windowManager.js:88
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Sledi spremembam" msgstr "Sledi spremembam"
#: ../js/ui/windowManager.js:105 #: ../js/ui/windowManager.js:107
#, 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 +1469,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:604 #: ../js/ui/windowManager.js:599
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
@@ -1510,38 +1506,14 @@ 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:105 #: ../js/ui/windowMenu.js:106
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:120 #: ../js/ui/windowMenu.js:111
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:136
msgid "Move to Monitor Up"
msgstr "\t"
#: ../js/ui/windowMenu.js:142
msgid "Move to Monitor Down"
msgstr "Premakni na zaslon spodaj"
#: ../js/ui/windowMenu.js:148
msgid "Move to Monitor Left"
msgstr "Premakni na zaslon levo"
#: ../js/ui/windowMenu.js:154
msgid "Move to Monitor Right"
msgstr "Premakni na zaslon desno"
#: ../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 "Koledar Evolution " msgstr "Koledar Evolution "
@@ -1598,11 +1570,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:742 #: ../src/shell-keyring-prompt.c:714
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:750 #: ../src/shell-keyring-prompt.c:722
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "Geslo ne more biti prazno" msgstr "Geslo ne more biti prazno"

801
po/sv.po

File diff suppressed because it is too large Load Diff

163
po/tg.po
View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Tajik Gnome\n" "Project-Id-Version: Tajik Gnome\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-06-24 20:04+0000\n" "POT-Creation-Date: 2015-03-13 20:44+0000\n"
"PO-Revision-Date: 2015-06-25 10:20+0500\n" "PO-Revision-Date: 2015-03-14 09:50+0500\n"
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n" "Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: tg\n" "Language: tg\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.7.5\n" "X-Generator: Poedit 1.6.5\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@@ -305,14 +305,14 @@ msgstr ""
msgid "Network Login" msgid "Network Login"
msgstr "Воридшавии шабакавӣ" msgstr "Воридшавии шабакавӣ"
#: ../js/extensionPrefs/main.js:122 #: ../js/extensionPrefs/main.js:123
#, 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 "" msgstr ""
"Ҳангоми боркунии равзанаи гуфтугӯи хусусиятҳо барои %s хатогие ба вуҷуд " "Ҳангоми боркунии равзанаи гуфтугӯи хусусиятҳо барои %s хатогие ба вуҷуд "
"омадааст:" "омадааст:"
#: ../js/extensionPrefs/main.js:154 #: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "Пасвандҳои восити GNOME" msgstr "Пасвандҳои восити GNOME"
@@ -323,39 +323,39 @@ msgstr "Пасвандҳои восити GNOME"
msgid "Cancel" msgid "Cancel"
msgstr "Бекор кардан" msgstr "Бекор кардан"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
msgid "Next" msgid "Next"
msgstr "Навбатӣ" msgstr "Навбатӣ"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403 #: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59 #: ../js/ui/unlockDialog.js:59
msgid "Unlock" msgid "Unlock"
msgstr "Кушодан" msgstr "Кушодан"
#: ../js/gdm/authPrompt.js:213 #: ../js/gdm/authPrompt.js:215
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Ворид шудан" msgstr "Ворид шудан"
#: ../js/gdm/loginDialog.js:281 #: ../js/gdm/loginDialog.js:280
msgid "Choose Session" msgid "Choose Session"
msgstr "Интихоби ҷаласа" msgstr "Интихоби ҷаласа"
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:421
msgid "Not listed?" msgid "Not listed?"
msgstr "Вуҷуд надора?" msgstr "Вуҷуд надора?"
#: ../js/gdm/loginDialog.js:840 #: ../js/gdm/loginDialog.js:830
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(масалан, корбар ё %s)" msgstr "(масалан, корбар ё %s)"
#: ../js/gdm/loginDialog.js:845 ../js/ui/components/networkAgent.js:271 #: ../js/gdm/loginDialog.js:835 ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:289 #: ../js/ui/components/networkAgent.js:289
msgid "Username: " msgid "Username: "
msgstr "Номи корбар:" msgstr "Номи корбар:"
#: ../js/gdm/loginDialog.js:1173 #: ../js/gdm/loginDialog.js:1170
msgid "Login Window" msgid "Login Window"
msgstr "Равзанаи воридшавӣ" msgstr "Равзанаи воридшавӣ"
@@ -448,31 +448,31 @@ msgstr "%B %d %Y, %l%M %p"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Бозфиристодани санҷиши ҳаққонияти веб" msgstr "Бозфиристодани санҷиши ҳаққонияти веб"
#: ../js/ui/appDisplay.js:788 #: ../js/ui/appDisplay.js:792
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Барномаҳои бештар истифодашуда ин ҷо намоиш дода мешаванд" msgstr "Барномаҳои бештар истифодашуда ин ҷо намоиш дода мешаванд"
#: ../js/ui/appDisplay.js:908 #: ../js/ui/appDisplay.js:912
msgid "Frequent" msgid "Frequent"
msgstr "Роиҷ" msgstr "Роиҷ"
#: ../js/ui/appDisplay.js:915 #: ../js/ui/appDisplay.js:919
msgid "All" msgid "All"
msgstr "Ҳама" msgstr "Ҳама"
#: ../js/ui/appDisplay.js:1844 #: ../js/ui/appDisplay.js:1850
msgid "New Window" msgid "New Window"
msgstr "Равзанаи нав" msgstr "Равзанаи нав"
#: ../js/ui/appDisplay.js:1872 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1878 ../js/ui/dash.js:291
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Тоза кардан аз Баргузидаҳо" msgstr "Тоза кардан аз Баргузидаҳо"
#: ../js/ui/appDisplay.js:1878 #: ../js/ui/appDisplay.js:1884
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Илова кардан ба Баргузидаҳо" msgstr "Илова кардан ба Баргузидаҳо"
#: ../js/ui/appDisplay.js:1888 #: ../js/ui/appDisplay.js:1894
msgid "Show Details" msgid "Show Details"
msgstr "Намоиш додани тафсилот" msgstr "Намоиш додани тафсилот"
@@ -486,19 +486,15 @@ msgstr "%s ба баргузидаҳои шумо илова шудааст."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s аз баргузидаҳои шумо тоза шудааст." msgstr "%s аз баргузидаҳои шумо тоза шудааст."
#: ../js/ui/backgroundMenu.js:19 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650
msgid "Change Background…" #: ../js/ui/status/system.js:337
msgstr "Тағйир додани пазсамина..."
#: ../js/ui/backgroundMenu.js:21
msgid "Display Settings"
msgstr "Танзимоти дисплей"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
#: ../js/ui/status/system.js:357
msgid "Settings" msgid "Settings"
msgstr "Танзимот" msgstr "Танзимот"
#: ../js/ui/backgroundMenu.js:21
msgid "Change Background…"
msgstr "Тағйир додани пазсамина..."
#. 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,53 +547,53 @@ msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "Ш" msgstr "Ш"
#: ../js/ui/calendar.js:564 #: ../js/ui/calendar.js:563
msgid "Previous month" msgid "Previous month"
msgstr "Моҳи қаблӣ" msgstr "Моҳи қаблӣ"
#: ../js/ui/calendar.js:574 #: ../js/ui/calendar.js:573
msgid "Next month" msgid "Next month"
msgstr "Моҳи навбатӣ" msgstr "Моҳи навбатӣ"
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:780
msgid "Week %V" msgid "Week %V"
msgstr "Ҳафтаи %V" msgstr "Ҳафтаи %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:1187 #: ../js/ui/calendar.js:1182
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Тамоми рӯз" msgstr "Тамоми рӯз"
#: ../js/ui/calendar.js:1289 #: ../js/ui/calendar.js:1288
msgid "Clear section" msgid "Clear section"
msgstr "Пок кардани қисмат" msgstr "Пок кардани қисмат"
#: ../js/ui/calendar.js:1516 #: ../js/ui/calendar.js:1515
msgid "Events" msgid "Events"
msgstr "Рӯйдодҳо" msgstr "Рӯйдодҳо"
#: ../js/ui/calendar.js:1525 #: ../js/ui/calendar.js:1524
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d"
#: ../js/ui/calendar.js:1529 #: ../js/ui/calendar.js:1528
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y" msgstr "%A, %B %d, %Y"
#: ../js/ui/calendar.js:1614 #: ../js/ui/calendar.js:1613
msgid "Notifications" msgid "Notifications"
msgstr "Огоҳиҳо" msgstr "Огоҳиҳо"
#: ../js/ui/calendar.js:1765 #: ../js/ui/calendar.js:1764
msgid "No Notifications" msgid "No Notifications"
msgstr "Ягон огоҳӣ нест" msgstr "Ягон огоҳӣ нест"
#: ../js/ui/calendar.js:1768 #: ../js/ui/calendar.js:1767
msgid "No Events" msgid "No Events"
msgstr "Ягон рӯйдод нест" msgstr "Ягон рӯйдод нест"
@@ -733,7 +729,7 @@ msgstr "Мутаассифона, ин амал иҷро нашуд. Лутфа
#. 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:757 #: ../js/ui/components/telepathyClient.js:775
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s аллакой бо номи %s номида мешавад" msgstr "%s аллакой бо номи %s номида мешавад"
@@ -742,11 +738,11 @@ msgstr "%s аллакой бо номи %s номида мешавад"
msgid "Windows" msgid "Windows"
msgstr "Равзанаҳо" msgstr "Равзанаҳо"
#: ../js/ui/dash.js:250 ../js/ui/dash.js:291 #: ../js/ui/dash.js:252 ../js/ui/dash.js:293
msgid "Show Applications" msgid "Show Applications"
msgstr "Намоиш додани барномаҳо" msgstr "Намоиш додани барномаҳо"
#: ../js/ui/dash.js:449 #: ../js/ui/dash.js:453
msgid "Dash" msgid "Dash"
msgstr "Рах" msgstr "Рах"
@@ -914,16 +910,17 @@ msgstr "Насб кардан"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "“%s”-ро аз extensions.gnome.org боргирӣ ва насб мекунед?" msgstr "“%s”-ро аз extensions.gnome.org боргирӣ ва насб мекунед?"
#: ../js/ui/keyboard.js:747 ../js/ui/status/keyboard.js:713 #: ../js/ui/keyboard.js:714 ../js/ui/status/keyboard.js:580
msgid "Keyboard" msgid "Keyboard"
msgstr "Клавиатура" msgstr "Клавиатура"
#. translators: 'Hide' is a verb */ #. translators: 'Hide' is a verb */
#: ../js/ui/legacyTray.js:66 #: ../js/ui/legacyTray.js:59
#| msgid "Hide Text"
msgid "Hide tray" msgid "Hide tray"
msgstr "Пинҳон кардани лавҳа" msgstr "Пинҳон кардани лавҳа"
#: ../js/ui/legacyTray.js:107 #: ../js/ui/legacyTray.js:91
msgid "Status Icons" msgid "Status Icons"
msgstr "Нишонаҳои вазъият" msgstr "Нишонаҳои вазъият"
@@ -979,7 +976,7 @@ msgstr "Намоиш додани манбаъ"
msgid "Web Page" msgid "Web Page"
msgstr "Саҳифаи веб" msgstr "Саҳифаи веб"
#: ../js/ui/messageTray.js:1486 #: ../js/ui/messageTray.js:2133
msgid "System Information" msgid "System Information"
msgstr "Маълумоти система" msgstr "Маълумоти система"
@@ -1021,7 +1018,7 @@ msgstr "toggle-switch-us"
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Фармонеро ворид кунед" msgstr "Фармонеро ворид кунед"
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162 #: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:120
msgid "Close" msgid "Close"
msgstr "Пӯшидан" msgstr "Пӯшидан"
@@ -1049,27 +1046,27 @@ msgid_plural "%d new notifications"
msgstr[0] "%d огоҳии нав" msgstr[0] "%d огоҳии нав"
msgstr[1] "%d огоҳии нав" msgstr[1] "%d огоҳии нав"
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Қулф кардан" msgstr "Қулф кардан"
#: ../js/ui/screenShield.js:684 #: ../js/ui/screenShield.js:668
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME бояд экранро қулф кунад" msgstr "GNOME бояд экранро қулф кунад"
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271 #: ../js/ui/screenShield.js:795 ../js/ui/screenShield.js:1271
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Қулф карда намешавад" msgstr "Қулф карда намешавад"
#: ../js/ui/screenShield.js:806 ../js/ui/screenShield.js:1272 #: ../js/ui/screenShield.js:796 ../js/ui/screenShield.js:1272
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Қулф аз тарави барнома баста шудааст" msgstr "Қулф аз тарави барнома баста шудааст"
#: ../js/ui/search.js:617 #: ../js/ui/search.js:616
msgid "Searching…" msgid "Searching…"
msgstr "Ҷустуҷӯ рафта истодааст..." msgstr "Ҷустуҷӯ рафта истодааст..."
#: ../js/ui/search.js:619 #: ../js/ui/search.js:618
msgid "No results." msgid "No results."
msgstr "Ягон натиҷа нест." msgstr "Ягон натиҷа нест."
@@ -1133,11 +1130,11 @@ msgstr "Тугмаҳои ҷастухез"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Тугмаҳои муш" msgstr "Тугмаҳои муш"
#: ../js/ui/status/accessibility.js:167 #: ../js/ui/status/accessibility.js:144
msgid "High Contrast" msgid "High Contrast"
msgstr "Контрасти баланд" msgstr "Контрасти баланд"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:193
msgid "Large Text" msgid "Large Text"
msgstr "Матни бузург" msgstr "Матни бузург"
@@ -1171,7 +1168,7 @@ msgstr "Пайваст нашудааст"
msgid "Brightness" msgid "Brightness"
msgstr "Дурахшонӣ" msgstr "Дурахшонӣ"
#: ../js/ui/status/keyboard.js:736 #: ../js/ui/status/keyboard.js:603
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Намоиш додани тарҳбандии клавиатура" msgstr "Намоиш додани тарҳбандии клавиатура"
@@ -1382,23 +1379,23 @@ msgstr "Ҳолати ҳавопаймо"
msgid "On" msgid "On"
msgstr "Фаъол" msgstr "Фаъол"
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Таъвизи корбар" msgstr "Таъвизи корбар"
#: ../js/ui/status/system.js:342 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Баромад" msgstr "Баромад"
#: ../js/ui/status/system.js:361 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Қулфи самт" msgstr "Қулфи самт"
#: ../js/ui/status/system.js:369 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Таваққуф" msgstr "Таваққуф"
#: ../js/ui/status/system.js:372 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Хомӯш кардан" msgstr "Хомӯш кардан"
@@ -1459,7 +1456,7 @@ msgstr[1] "Тағйироти танзимот баъд аз %d сония ба
#. 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:605 #: ../js/ui/windowManager.js:599
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
@@ -1496,38 +1493,14 @@ msgstr "Ҳамеша дар боло"
msgid "Always on Visible Workspace" msgid "Always on Visible Workspace"
msgstr "Ҳамеша дар фазои кории намоён" msgstr "Ҳамеша дар фазои кории намоён"
#: ../js/ui/windowMenu.js:105 #: ../js/ui/windowMenu.js:106
msgid "Move to Workspace Left"
msgstr "Интиқол додан ба фазои кории чап"
#: ../js/ui/windowMenu.js:110
msgid "Move to Workspace Right"
msgstr "Интиқол додан ба фазои кории рост"
#: ../js/ui/windowMenu.js:115
msgid "Move to Workspace Up" msgid "Move to Workspace Up"
msgstr "Интиқол додан ба фазои кории боло" msgstr "Интиқол додан ба фазои кории боло"
#: ../js/ui/windowMenu.js:120 #: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down" msgid "Move to Workspace Down"
msgstr "Интиқол додан ба фазои кории поён" msgstr "Интиқол додан ба фазои кории поён"
#: ../js/ui/windowMenu.js:136
msgid "Move to Monitor Up"
msgstr "Интиқол ба канори болои монитор"
#: ../js/ui/windowMenu.js:142
msgid "Move to Monitor Down"
msgstr "Интиқол ба канори поёни монитор"
#: ../js/ui/windowMenu.js:148
msgid "Move to Monitor Left"
msgstr "Интиқол ба канори чапи монитор"
#: ../js/ui/windowMenu.js:154
msgid "Move to Monitor Right"
msgstr "Интиқол ба канори рости монитор"
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Ӣақвими Evolution" msgstr "Ӣақвими Evolution"
@@ -1571,21 +1544,21 @@ msgstr ""
msgid "List possible modes" msgid "List possible modes"
msgstr "Рӯйхати ҳолатҳои имконпазир" msgstr "Рӯйхати ҳолатҳои имконпазир"
#: ../src/shell-app.c:239 #: ../src/shell-app.c:247
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Номаълум" msgstr "Номаълум"
#: ../src/shell-app.c:480 #: ../src/shell-app.c:488
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Оғози “%s” қатъ шудааст" msgstr "Оғози “%s” қатъ шудааст"
#: ../src/shell-keyring-prompt.c:742 #: ../src/shell-keyring-prompt.c:714
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "Паролҳо мувофиқат намекунанд." msgstr "Паролҳо мувофиқат намекунанд."
#: ../src/shell-keyring-prompt.c:750 #: ../src/shell-keyring-prompt.c:722
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "Парол бояд холӣ набошад" msgstr "Парол бояд холӣ набошад"
@@ -1814,7 +1787,7 @@ msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо
#~ "маҳдудиятҳое, ки бо китобхонаи рамзгузорӣ таъин шудаанд, дарозтар мебошад" #~ "маҳдудиятҳое, ки бо китобхонаи рамзгузорӣ таъин шудаанд, дарозтар мебошад"
#~ msgid "Internal error" #~ msgid "Internal error"
#~ msgstr "Хатои дохилӣ" #~ msgstr "Хатогии дохилӣ"
#~ msgid "Unable to connect to %s" #~ msgid "Unable to connect to %s"
#~ msgstr "Пайвастшавӣ ба %s имконнопазир аст" #~ msgstr "Пайвастшавӣ ба %s имконнопазир аст"

613
po/tr.po

File diff suppressed because it is too large Load Diff

View File

@@ -21,8 +21,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-04-25 08:00+0000\n" "POT-Creation-Date: 2015-03-03 22:33+0000\n"
"PO-Revision-Date: 2015-04-17 19:36+0800\n" "PO-Revision-Date: 2015-03-04 17:55+0800\n"
"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n" "Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n" "Language: zh_CN\n"
@@ -30,7 +30,6 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 1.7.5\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@@ -288,55 +287,55 @@ msgstr "将鼠标模式下焦点的更改推迟到指针停止移动之后"
msgid "Network Login" msgid "Network Login"
msgstr "网络登录" msgstr "网络登录"
#: ../js/extensionPrefs/main.js:122 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "载入 %s 的首选想对话框出错:" msgstr "载入 %s 的首选想对话框出错:"
#: ../js/extensionPrefs/main.js:154 #: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "配置 GNOME Shell 扩展" msgstr "配置 GNOME Shell 扩展"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:916 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
msgid "Next" msgid "Next"
msgstr "下一步" msgstr "下一步"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403 #: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59 #: ../js/ui/unlockDialog.js:59
msgid "Unlock" msgid "Unlock"
msgstr "解锁" msgstr "解锁"
#: ../js/gdm/authPrompt.js:213 #: ../js/gdm/authPrompt.js:215
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "登录" msgstr "登录"
#: ../js/gdm/loginDialog.js:281 #: ../js/gdm/loginDialog.js:276
msgid "Choose Session" msgid "Choose Session"
msgstr "选择会话" msgstr "选择会话"
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:417
msgid "Not listed?" msgid "Not listed?"
msgstr "未列出?" msgstr "未列出?"
#: ../js/gdm/loginDialog.js:840 #: ../js/gdm/loginDialog.js:826
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(如 user 或 %s)" msgstr "(如 user 或 %s)"
#: ../js/gdm/loginDialog.js:845 ../js/ui/components/networkAgent.js:271 #: ../js/gdm/loginDialog.js:831 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:289 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "用户名:" msgstr "用户名:"
#: ../js/gdm/loginDialog.js:1173 #: ../js/gdm/loginDialog.js:1166
msgid "Login Window" msgid "Login Window"
msgstr "登录窗口" msgstr "登录窗口"
@@ -348,112 +347,50 @@ msgstr "认证出错"
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(或滑动手指)" msgstr "(或滑动手指)"
#: ../js/misc/util.js:119 #: ../js/misc/util.js:115
msgid "Command not found" msgid "Command not found"
msgstr "命令未找到" msgstr "命令未找到"
#: ../js/misc/util.js:152 #: ../js/misc/util.js:148
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "不能解析命令:" msgstr "不能解析命令:"
#: ../js/misc/util.js:160 #: ../js/misc/util.js:156
#, javascript-format #, javascript-format
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "运行“%s”失败" msgstr "运行“%s”失败"
#. Translators: Time in 24h format */
#: ../js/misc/util.js:191
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/misc/util.js:197
msgid "Yesterday, %H%M"
msgstr "昨天 %H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/misc/util.js:203
msgid "%A, %H%M"
msgstr "%A %H:%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#: ../js/misc/util.js:209
msgid "%B %d, %H%M"
msgstr "%m月%d日, %H:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#: ../js/misc/util.js:215
msgid "%B %d %Y, %H%M"
msgstr "%Y年%m月%d日, %H:%M"
#. Translators: Time in 12h format */
#: ../js/misc/util.js:220
msgid "%l%M %p"
msgstr "%p %-l:%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/misc/util.js:226
msgid "Yesterday, %l%M %p"
msgstr "昨天%p %-l:%M"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/misc/util.js:232
msgid "%A, %l%M %p"
msgstr "%A%p %-l:%M"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/misc/util.js:238
msgid "%B %d, %l%M %p"
msgstr "%m月%d日%p %-l:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/misc/util.js:244
msgid "%B %d %Y, %l%M %p"
msgstr "%Y年%m月%d日%p %-l:%M"
#. TRANSLATORS: this is the title of the wifi captive portal login #. TRANSLATORS: this is the title of the wifi captive portal login
#. * window, until we know the title of the actual login page */ #. * window, until we know the title of the actual login page */
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "网页认证重定向" msgstr "网页认证重定向"
#: ../js/ui/appDisplay.js:788 #: ../js/ui/appDisplay.js:785
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "常用的应用程序会出现在这里" msgstr "常用的应用程序会出现在这里"
#: ../js/ui/appDisplay.js:908 #: ../js/ui/appDisplay.js:905
msgid "Frequent" msgid "Frequent"
msgstr "常用" msgstr "常用"
#: ../js/ui/appDisplay.js:915 #: ../js/ui/appDisplay.js:912
msgid "All" msgid "All"
msgstr "全部" msgstr "全部"
#: ../js/ui/appDisplay.js:1844 #: ../js/ui/appDisplay.js:1840
msgid "New Window" msgid "New Window"
msgstr "新窗口" msgstr "新窗口"
#: ../js/ui/appDisplay.js:1872 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1868 ../js/ui/dash.js:289
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "从收藏夹中移除" msgstr "从收藏夹中移除"
#: ../js/ui/appDisplay.js:1878 #: ../js/ui/appDisplay.js:1874
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "添加到收藏夹" msgstr "添加到收藏夹"
#: ../js/ui/appDisplay.js:1888 #: ../js/ui/appDisplay.js:1884
msgid "Show Details" msgid "Show Details"
msgstr "显示细节" msgstr "显示细节"
@@ -467,8 +404,8 @@ msgstr "%s 已经添加到了您的收藏夹。"
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s 已经从您的收藏夹移除。" msgstr "%s 已经从您的收藏夹移除。"
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:649
#: ../js/ui/status/system.js:334 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "设置" msgstr "设置"
@@ -477,104 +414,119 @@ msgid "Change Background…"
msgstr "更换壁纸..." msgstr "更换壁纸..."
#. 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:52
msgctxt "calendar-no-work" msgctxt "calendar-no-work"
msgid "06" msgid "06"
msgstr "周日和周六" msgstr "周日和周六"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#. */
#: ../js/ui/calendar.js:81
msgctxt "event list time"
msgid "All Day"
msgstr "全天"
#. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:88 ../js/ui/calendar.js:1596
msgctxt "event list time"
msgid "%H%M"
msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */
#: ../js/ui/calendar.js:97
msgctxt "event list time"
msgid "%l%M%p"
msgstr "%p %-l:%M"
#. Translators: Calendar grid abbreviation for Sunday. #. Translators: Calendar grid abbreviation for Sunday.
#. * #. *
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:111
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "日" msgstr "日"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:84 #: ../js/ui/calendar.js:113
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "一" msgstr "一"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:86 #: ../js/ui/calendar.js:115
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "二" msgstr "二"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:88 #: ../js/ui/calendar.js:117
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "三" msgstr "三"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:90 #: ../js/ui/calendar.js:119
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "四" msgstr "四"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:92 #: ../js/ui/calendar.js:121
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "五" msgstr "五"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:94 #: ../js/ui/calendar.js:123
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "六" msgstr "六"
#: ../js/ui/calendar.js:564 #: ../js/ui/calendar.js:590
msgid "Previous month" msgid "Previous month"
msgstr "上个月" msgstr "上个月"
#: ../js/ui/calendar.js:574 #: ../js/ui/calendar.js:600
msgid "Next month" msgid "Next month"
msgstr "下个月" msgstr "下个月"
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:807
msgid "Week %V" msgid "Week %V"
msgstr "第 %V 星期" msgstr "第 %V 星期"
#. Translators: Shown in calendar event list for all day events #: ../js/ui/calendar.js:1263
#. * Keep it short, best if you can use less then 10 characters
#. */
#: ../js/ui/calendar.js:1187
msgctxt "event list time"
msgid "All Day"
msgstr "全天"
#: ../js/ui/calendar.js:1289
msgid "Clear section" msgid "Clear section"
msgstr "清除选中项目" msgstr "清除选中项目"
#: ../js/ui/calendar.js:1516 #: ../js/ui/calendar.js:1455
msgid "Events" msgid "Events"
msgstr "事件" msgstr "事件"
#: ../js/ui/calendar.js:1525 #: ../js/ui/calendar.js:1463
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%m月%d日 %A" msgstr "%m月%d日 %A"
#: ../js/ui/calendar.js:1529 #: ../js/ui/calendar.js:1467
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%Y年%m月%d日 %A" msgstr "%Y年%m月%d日 %A"
#: ../js/ui/calendar.js:1614 #: ../js/ui/calendar.js:1560
msgid "Notifications" msgid "Notifications"
msgstr "提示" msgstr "提示"
#: ../js/ui/calendar.js:1765 #: ../js/ui/calendar.js:1700
msgid "No Notifications" msgid "No Notifications"
msgstr "无提示" msgstr "无提示"
#: ../js/ui/calendar.js:1768 #: ../js/ui/calendar.js:1703
msgid "No Events" msgid "No Events"
msgstr "无事件" msgstr "无事件"
@@ -599,93 +551,79 @@ msgstr "密码:"
msgid "Type again:" msgid "Type again:"
msgstr "再输一次:" msgstr "再输一次:"
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "连接" msgstr "连接"
#: ../js/ui/components/networkAgent.js:233 #: ../js/ui/components/networkAgent.js:231
#: ../js/ui/components/networkAgent.js:245 #: ../js/ui/components/networkAgent.js:243
#: ../js/ui/components/networkAgent.js:273 #: ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:293 #: ../js/ui/components/networkAgent.js:291
#: ../js/ui/components/networkAgent.js:303 #: ../js/ui/components/networkAgent.js:301
msgid "Password: " msgid "Password: "
msgstr "密码:" msgstr "密码:"
#: ../js/ui/components/networkAgent.js:238 #: ../js/ui/components/networkAgent.js:236
msgid "Key: " msgid "Key: "
msgstr "密钥:" msgstr "密钥:"
#: ../js/ui/components/networkAgent.js:277 #: ../js/ui/components/networkAgent.js:275
msgid "Identity: " msgid "Identity: "
msgstr "身份:" msgstr "身份:"
#: ../js/ui/components/networkAgent.js:279 #: ../js/ui/components/networkAgent.js:277
msgid "Private key password: " msgid "Private key password: "
msgstr "私人密钥密码:" msgstr "私人密钥密码:"
#: ../js/ui/components/networkAgent.js:291 #: ../js/ui/components/networkAgent.js:289
msgid "Service: " msgid "Service: "
msgstr "服务:" msgstr "服务:"
#: ../js/ui/components/networkAgent.js:320 #: ../js/ui/components/networkAgent.js:318
#: ../js/ui/components/networkAgent.js:658
msgid "Authentication required by wireless network" msgid "Authentication required by wireless network"
msgstr "无线网络要求身份认证" msgstr "无线网络要求身份认证"
#: ../js/ui/components/networkAgent.js:321 #: ../js/ui/components/networkAgent.js:319
#: ../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 "访问无线网络“%s”需要密码或密钥。" msgstr "访问无线网络“%s”需要密码或密钥。"
#: ../js/ui/components/networkAgent.js:325 #: ../js/ui/components/networkAgent.js:323
#: ../js/ui/components/networkAgent.js:662
msgid "Wired 802.1X authentication" msgid "Wired 802.1X authentication"
msgstr "有线 802.1X 认证" msgstr "有线 802.1X 认证"
#: ../js/ui/components/networkAgent.js:327 #: ../js/ui/components/networkAgent.js:325
msgid "Network name: " msgid "Network name: "
msgstr "网络名称:" msgstr "网络名称:"
#: ../js/ui/components/networkAgent.js:332 #: ../js/ui/components/networkAgent.js:330
#: ../js/ui/components/networkAgent.js:666
msgid "DSL authentication" msgid "DSL authentication"
msgstr "DSL 认证" msgstr "DSL 认证"
#: ../js/ui/components/networkAgent.js:339 #: ../js/ui/components/networkAgent.js:337
#: ../js/ui/components/networkAgent.js:672
msgid "PIN code required" msgid "PIN code required"
msgstr "需要 PIN 码" msgstr "需要 PIN 码"
#: ../js/ui/components/networkAgent.js:340 #: ../js/ui/components/networkAgent.js:338
#: ../js/ui/components/networkAgent.js:673
msgid "PIN code is needed for the mobile broadband device" msgid "PIN code is needed for the mobile broadband device"
msgstr "移动宽带设备需要 PIN 码" msgstr "移动宽带设备需要 PIN 码"
#: ../js/ui/components/networkAgent.js:341 #: ../js/ui/components/networkAgent.js:339
msgid "PIN: " msgid "PIN: "
msgstr "PIN" msgstr "PIN"
#: ../js/ui/components/networkAgent.js:348 #: ../js/ui/components/networkAgent.js:345
#: ../js/ui/components/networkAgent.js:679
msgid "Mobile broadband network password" msgid "Mobile broadband network password"
msgstr "移动宽带网络密码" msgstr "移动宽带网络密码"
#: ../js/ui/components/networkAgent.js:349 #: ../js/ui/components/networkAgent.js:346
#: ../js/ui/components/networkAgent.js:663
#: ../js/ui/components/networkAgent.js:667
#: ../js/ui/components/networkAgent.js:680
#, javascript-format #, javascript-format
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "连接到“%s”需要密码。" msgstr "连接到“%s”需要密码。"
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1657
msgid "Network Manager"
msgstr "网络管理器"
#: ../js/ui/components/polkitAgent.js:54 #: ../js/ui/components/polkitAgent.js:54
msgid "Authentication Required" msgid "Authentication Required"
msgstr "需要认证" msgstr "需要认证"
@@ -706,9 +644,71 @@ msgstr "认证"
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "抱歉,您的输入有误。请重试。" msgstr "抱歉,您的输入有误。请重试。"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:764 ../js/ui/dateMenu.js:210
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:771
msgid "Yesterday, %H%M"
msgstr "昨天 %H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:778
msgid "%A, %H%M"
msgstr "%A %H:%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:785
msgid "%B %d, %H%M"
msgstr "%m月%d日, %H:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:791
msgid "%B %d %Y, %H%M"
msgstr "%Y年%m月%d日, %H:%M"
#. Translators: Time in 12h format */
#: ../js/ui/components/telepathyClient.js:797 ../js/ui/dateMenu.js:213
msgid "%l%M %p"
msgstr "%p %-l:%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:804
msgid "Yesterday, %l%M %p"
msgstr "昨天%p %-l:%M"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:811
msgid "%A, %l%M %p"
msgstr "%A%p %-l:%M"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:818
msgid "%B %d, %l%M %p"
msgstr "%m月%d日%p %-l:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:824
msgid "%B %d %Y, %l%M %p"
msgstr "%Y年%m月%d日%p %-l:%M"
#. 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:757 #: ../js/ui/components/telepathyClient.js:856
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s 现在叫做 %s" msgstr "%s 现在叫做 %s"
@@ -721,7 +721,7 @@ msgstr "窗口"
msgid "Show Applications" msgid "Show Applications"
msgstr "显示应用程序" msgstr "显示应用程序"
#: ../js/ui/dash.js:449 #: ../js/ui/dash.js:451
msgid "Dash" msgid "Dash"
msgstr "Dash" msgstr "Dash"
@@ -878,19 +878,10 @@ msgstr "安装"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "从 extensions.gnome.org 下载并安装“%s”" msgstr "从 extensions.gnome.org 下载并安装“%s”"
#: ../js/ui/keyboard.js:718 ../js/ui/status/keyboard.js:713 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:576
msgid "Keyboard" msgid "Keyboard"
msgstr "键盘" msgstr "键盘"
#. translators: 'Hide' is a verb */
#: ../js/ui/legacyTray.js:66
msgid "Hide tray"
msgstr "隐藏托盘"
#: ../js/ui/legacyTray.js:107
msgid "Status Icons"
msgstr "状态图标"
#: ../js/ui/lookingGlass.js:643 #: ../js/ui/lookingGlass.js:643
msgid "No extensions installed" msgid "No extensions installed"
msgstr "未安装扩展" msgstr "未安装扩展"
@@ -943,7 +934,7 @@ msgstr "查看源"
msgid "Web Page" msgid "Web Page"
msgstr "网页" msgstr "网页"
#: ../js/ui/messageTray.js:1504 #: ../js/ui/messageTray.js:2131
msgid "System Information" msgid "System Information"
msgstr "系统信息" msgstr "系统信息"
@@ -963,21 +954,21 @@ msgstr "概览"
msgid "Type to search…" msgid "Type to search…"
msgstr "输入以搜索..." msgstr "输入以搜索..."
#: ../js/ui/panel.js:352 #: ../js/ui/panel.js:351
msgid "Quit" msgid "Quit"
msgstr "退出" msgstr "退出"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */ #. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:404 #: ../js/ui/panel.js:403
msgid "Activities" msgid "Activities"
msgstr "活动" msgstr "活动"
#: ../js/ui/panel.js:755 #: ../js/ui/panel.js:754
msgid "Top Bar" msgid "Top Bar"
msgstr "顶栏" msgstr "顶栏"
#: ../js/ui/popupMenu.js:289 #: ../js/ui/popupMenu.js:288
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-us" msgstr "toggle-switch-us"
@@ -1011,7 +1002,7 @@ msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d 条新通知" msgstr[0] "%d 条新通知"
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:342 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "锁定" msgstr "锁定"
@@ -1027,11 +1018,11 @@ msgstr "无法锁定"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "一个应用程序阻止了锁定" msgstr "一个应用程序阻止了锁定"
#: ../js/ui/search.js:617 #: ../js/ui/search.js:609
msgid "Searching…" msgid "Searching…"
msgstr "正在搜索..." msgstr "正在搜索..."
#: ../js/ui/search.js:619 #: ../js/ui/search.js:611
msgid "No results." msgid "No results."
msgstr "无结果。" msgstr "无结果。"
@@ -1095,11 +1086,11 @@ msgstr "筛选键"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "鼠标按键" msgstr "鼠标按键"
#: ../js/ui/status/accessibility.js:167 #: ../js/ui/status/accessibility.js:144
msgid "High Contrast" msgid "High Contrast"
msgstr "高对比度" msgstr "高对比度"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:193
msgid "Large Text" msgid "Large Text"
msgstr "大号文本" msgstr "大号文本"
@@ -1132,7 +1123,7 @@ msgstr "无连接"
msgid "Brightness" msgid "Brightness"
msgstr "亮度" msgstr "亮度"
#: ../js/ui/status/keyboard.js:736 #: ../js/ui/status/keyboard.js:599
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "显示键盘布局" msgstr "显示键盘布局"
@@ -1301,6 +1292,10 @@ msgstr "VPN 设置"
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1657
msgid "Network Manager"
msgstr "网络管理器"
#: ../js/ui/status/network.js:1697 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "启用网络连接失败" msgstr "启用网络连接失败"
@@ -1343,23 +1338,23 @@ msgstr "乘机模式"
msgid "On" msgid "On"
msgstr "开" msgstr "开"
#: ../js/ui/status/system.js:314 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "切换用户" msgstr "切换用户"
#: ../js/ui/status/system.js:319 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "注销" msgstr "注销"
#: ../js/ui/status/system.js:338 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "方向锁定" msgstr "方向锁定"
#: ../js/ui/status/system.js:346 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "挂起" msgstr "挂起"
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "关机" msgstr "关机"
@@ -1419,7 +1414,7 @@ msgstr[0] "设置更改将在 %d 后还原"
#. 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:599
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
@@ -1504,12 +1499,12 @@ msgstr "使用指定模式,如 “gdm”用于登录屏幕的模式"
msgid "List possible modes" msgid "List possible modes"
msgstr "列出可用的模式" msgstr "列出可用的模式"
#: ../src/shell-app.c:239 #: ../src/shell-app.c:247
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
#: ../src/shell-app.c:480 #: ../src/shell-app.c:488
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "启动“%s”失败" msgstr "启动“%s”失败"
@@ -1525,11 +1520,3 @@ msgstr "密码不能为空"
#: ../src/shell-polkit-authentication-agent.c:346 #: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "认证对话框被用户驳回" msgstr "认证对话框被用户驳回"
#~ msgctxt "event list time"
#~ msgid "%H%M"
#~ msgstr "%H%M"
#~ msgctxt "event list time"
#~ msgid "%l%M%p"
#~ msgstr "%p %-l:%M"

File diff suppressed because it is too large Load Diff

View File

@@ -64,6 +64,8 @@ st_source_h = \
st/st-scroll-bar.h \ st/st-scroll-bar.h \
st/st-scroll-view.h \ st/st-scroll-view.h \
st/st-shadow.h \ st/st-shadow.h \
st/st-table.h \
st/st-table-child.h \
st/st-texture-cache.h \ st/st-texture-cache.h \
st/st-theme.h \ st/st-theme.h \
st/st-theme-context.h \ st/st-theme-context.h \
@@ -104,6 +106,7 @@ EXTRA_DIST += \
st_source_private_h = \ st_source_private_h = \
st/st-private.h \ st/st-private.h \
st/st-table-private.h \
st/st-theme-private.h \ st/st-theme-private.h \
st/st-theme-node-private.h \ st/st-theme-node-private.h \
st/st-theme-node-transition.h st/st-theme-node-transition.h
@@ -130,6 +133,8 @@ st_source_c = \
st/st-scroll-bar.c \ st/st-scroll-bar.c \
st/st-scroll-view.c \ st/st-scroll-view.c \
st/st-shadow.c \ st/st-shadow.c \
st/st-table.c \
st/st-table-child.c \
st/st-texture-cache.c \ st/st-texture-cache.c \
st/st-theme.c \ st/st-theme.c \
st/st-theme-context.c \ st/st-theme-context.c \

View File

@@ -201,7 +201,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.Sources5", "org.gnome.evolution.dataserver.Sources4",
0), 0),
NULL, NULL,
G_DBUS_CALL_FLAGS_NONE, G_DBUS_CALL_FLAGS_NONE,

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env perl #!/usr/bin/perl
# Copyright © 2011 Red Hat, Inc # Copyright © 2011 Red Hat, Inc
# #

Some files were not shown because too many files have changed in this diff Show More