Compare commits

...

76 Commits

Author SHA1 Message Date
Robert Ancell
c3ae81a5b3 Show a guest login prompt 2018-01-19 16:17:55 +13:00
Sveinn í Felli
74f4447b38 Update Icelandic translation 2017-12-08 09:01:12 +00:00
Bastien Nocera
a3736d3a39 dateMenu: Fix possible crash with unknown locations
If there are locations unknown to the libgweather version gnome-shell is
using, don't crash.

JS ERROR: TypeError: b.location is null
WorldClocksSection<._clocksChanged/<@resource:///org/gnome/shell/ui/dateMenu.js:141:1
WorldClocksSection<._clocksChanged@resource:///org/gnome/shell/ui/dateMenu.js:139:9

https://bugzilla.gnome.org/show_bug.cgi?id=791148
2017-12-06 02:06:49 +01:00
Bastien Nocera
b7b59d78b5 dateMenu: Ignore malformed world-clocks settings
Guard against a malformed setting that doesn't contain a
'location' key.

https://bugzilla.gnome.org/show_bug.cgi?id=791148
2017-12-06 02:06:47 +01:00
Marco Trevisan (Treviño)
ac596ca1c1 dash: Do not shadow ClutterActor's destroy()
Since commit ef1e27966d turned DashItemContainer into an StWidget,
the destroy() method overrides the ClutterActor method, which is at
the very least bad style. Instead, follow the usual pattern of using
a ::destroy handler.

https://bugzilla.gnome.org/show_bug.cgi?id=791233
2017-12-05 18:07:43 -05:00
Marco Trevisan (Treviño)
d5805f9f0d dash: Make sure item labels are only destroyed once
Labels are currently destroyed from both animateOutAndDestroy()
and destroy(), which now (rightfully) triggers a gjs warning. As
the label is created unconditionally since commit 36e5ae4a25,
mirror that and always release it in destroy() and hide it
elsewhere.

https://bugzilla.gnome.org/show_bug.cgi?id=791233
2017-12-05 18:07:39 -05:00
Marco Trevisan (Treviño)
3b4be770a0 status/keyboard: Reset menuItems and Label objects on change
In the current code it could happen that we've menuItems and indicatorLabels
for sources that aren't anymore around, because in case a source is removed
we don't cleanup the their container objects.
Also, we should nullify InputManager's _currentSource when sources change
or it might point to some invalid data again.

So it could happen that we try to access an invalid menuitem or label
if a source change happens mentioning a source that has been deleted.

https://bugzilla.gnome.org/show_bug.cgi?id=788931
2017-11-21 11:05:31 -05:00
Petr Kovar
580ba22954 Update Czech translation 2017-11-20 08:18:36 +01:00
Carlos Garnacho
af79d975b0 overview: Protect ::drag-end handlers
These end up emitting item-drag-end/window-drag-end pretty much
without checks. Given the MetaDnd object may end up emitting
::drag-leave as a result of the plugin ending its grab, this
would result on spurious emission of those events and subsequent
warnings.

For extra paranoia, the _inDrag variable has been split into
_inItemDrag/_inWindowDrag so we can't cross the streams.

https://bugzilla.gnome.org/show_bug.cgi?id=784545
2017-11-17 16:03:37 +01:00
Kjartan Maraas
bfe2558d68 Updated Norwegian bokmål translation. 2017-11-06 13:03:05 +01:00
Khaled Hosny
8f4e45abfa Update Arabic translation 2017-11-03 10:18:46 +02:00
Florian Müllner
6dd973be12 Bump version to 3.26.2
Update NEWS.
2017-11-02 17:01:38 +01:00
Florian Müllner
98be314e64 style: Fix left tile preview
Windows that are tiled to the left/right only use rounded corners
where they are attached to the edge, the preview should follow that.
2017-11-02 16:56:31 +01:00
Alessandro Bono
c0ef30d416 theme: Restore drag effect between workspaces
When dragging a window between two workspaces a light effect used
to be present. The effect was lost probably during the theme revamp
in version 3.16.

https://bugzilla.gnome.org/show_bug.cgi?id=789103
2017-11-02 16:56:19 +01:00
Florian Müllner
fd103ff703 dialog: Reset initial focus on destroy
Since 0b02f757f8 we track the button that should have key focus
when the dialog is opened. However when the dialog is reused, the
button may get destroyed - clear the initial focus in that case to
allow setButton() to set a new one.

https://bugzilla.gnome.org/show_bug.cgi?id=788542
2017-10-27 14:46:30 +02:00
Hannie Dumoleyn
49c144a64c Update Dutch translation 2017-10-25 09:03:41 +00:00
Marco Trevisan (Treviño)
2c2479581a main: use SA_NODEFER to track signals to being able to raise from alarm
After we receive one of the tracked signals, in case we get stuck inside
the gjs_dumpstack () call, we use an alarm to raise the previously emitted
signal, however without using SA_NODEFER, the raise inside the alarm handler
will be ignored.

To avoid to handle new signals caused by the handler calls, once we get the
first signal, we just ignore them all as they could only lead to dirty traces.

Also, cleaning up a bit the code, and disabling the shell log handler
in dump_gjs_stack_alarm_sigaction since this might lead to a new
gjs_dumpstack () request.

https://bugzilla.gnome.org/show_bug.cgi?id=789237
2017-10-24 01:22:16 -05:00
Marco Trevisan (Treviño)
f15650e060 main: call gjs_dumpstack on aborts and traps and optionally on segfaults
In order to debug issues triggered by JS code we might need to
see the stack of it, this is not normally visible in static stack traces,
thus we need to call gjs_dumpstack () before dying the process.

Intercepting signals SIGABRT, SIGTRAP (needed for catching fatal glib
errors) SIGFPE and SIGIOT by default, while introducing a new
'backtrace-segfaults' flag for the SHELL_DEBUG environment variable to
do the same on SIGSEGV and SIGBUS (this is a precaution to avoid that we
corrupt the stack for automatic errors trackers).

In any case after dumping the stack we raise the signal again, in order
to make the system aware of it.

https://bugzilla.gnome.org/show_bug.cgi?id=789237
2017-10-23 05:12:28 -05:00
Florian Müllner
78d58deb5a network: Spawn wifi panel for further WPA enterprise configuration
Settings recently split Wi-Fi configuration from the Network panel,
so launch that instead.

https://bugzilla.gnome.org/show_bug.cgi?id=789231
2017-10-20 18:05:10 +02:00
Florian Müllner
f4237a4ae7 popupMenu: Fix setting ImageMenuItem's icons via strings
Commit 28ca96064b added support for setting PopupImageMenuItem's icons
via GIcons as well as via strings. However as the check whether an object
implements the GIcon interface only works on GObjects, specifying an icon
name was broken. Fix that to actually allow both strings and GIcons.

https://bugzilla.gnome.org/show_bug.cgi?id=789018
2017-10-16 20:54:57 +02:00
Matej Urbančič
40616015e5 Updated Slovenian translation 2017-10-15 09:51:49 +02:00
Fabio Tomat
43ec5280b4 Update Friulian translation 2017-10-11 06:35:27 +00:00
Jonas Ådahl
5f8a511483 layout: Unset primary and bottom monitor when headless
We were handling being initially headless by only setting the primary
and bottom monitor if there was any primary monitor, then checking the
primary monitor reference before making calls assuming there was any
monitors.

What we didn't do was unset the primary and bottom monitor when going
headless, meaning that temporarly disconnecting a monitor while having
windows open caused an assert to be triggered due to various code paths
taking the path assuming there are valid monitors.

Unsetting both the primary and bottom monitor when going headless avoids
the code paths in the same way as they were avoided when starting
headless.

https://bugzilla.gnome.org/show_bug.cgi?id=788607
2017-10-07 00:38:16 -04:00
Xavi Ivars
f036786d4a [l10n] Updated Catalan (Valencian) translation 2017-10-05 13:59:55 +02:00
Florian Müllner
bf2a824fd1 Bump version to 3.26.1
Update NEWS.
2017-10-04 18:12:27 +02:00
Florian Müllner
d439456048 tests: Fix JS warning 2017-10-04 18:12:27 +02:00
Florian Müllner
4543ca1620 build: Run unit tests on meson test
Meson makes it easy to define unit tests, so hook up the existing
ones.

https://bugzilla.gnome.org/show_bug.cgi?id=786497
2017-10-04 18:12:27 +02:00
Florian Müllner
7da5a76aaa popupMenu: Close menus on session mode changes
We are already closing top bar menus on session mode changes, but
as this behavior makes sense for any other menus as well - dash
context menus or the background menu for instance - just generalize
the behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=787676
2017-10-04 18:12:27 +02:00
Florian Müllner
0b02f757f8 dialog: Fix setting buttons as initial key focus
Commit 1c7a3ee61b broke setting the initial key focus for default
buttons added via addButton(). Fix this by allowing the dialog class
to provide a different default widget to ModalDialog than the entire
dialog itself.

https://bugzilla.gnome.org/show_bug.cgi?id=788282
2017-10-04 18:12:27 +02:00
Florian Müllner
1939e22c22 workspace: Focus clone when highlighting
We don't use different hover- and focus indications for window previews,
so using keyboard navigation after hovering a clone often has surprising
results when the previous focus window wasn't the selected one. Address
this by simply moving the keyboard focus with the highlight.

https://bugzilla.gnome.org/show_bug.cgi?id=786546
2017-10-04 18:12:27 +02:00
Florian Müllner
8143f734f8 workspace: Fix tab navigation order
By default the focus chain uses the same order as the list returned
by clutter_actor_get_children(), which corresponds to the z-order.
This doesn't work well in the window picker, where clones follow
the stacking of windows to ensure a correct overview transition,
but previews are laid out purely based on space efficiency. As
a result, the order in which window previews are navigated when
tabbing around is essentially random. Fix this by providing a
focus chain implementation that is based on the visual layout
of the previews rather than the stacking.

https://bugzilla.gnome.org/show_bug.cgi?id=786546
2017-10-04 18:12:26 +02:00
Florian Müllner
156032a7ec weather: Mark conditions as significant
Otherwise the passed phenomenon/qualifier are ignored and a fallback
string is used.
2017-10-04 18:12:26 +02:00
Jonas Ådahl
5c37facc08 ui: Improve handling being headless
Don't assume there will always be a primary (logical) monitor, or any
(logical) monitor at all. This includes not allocating / layouting /
styling correctly when being headless.

The initial background loading will also be delayed until there are any
(logical) monitors connected.

https://bugzilla.gnome.org/show_bug.cgi?id=730551
2017-10-04 11:50:21 -04:00
Martin Andersson
59fc26f821 calendar: Rebuild the calendar when the time zone changes
A time zone change can cause the date to change so we need to clear
SpiderMonkey's time zone cache and rebuild the calendar.

https://bugzilla.gnome.org/show_bug.cgi?id=678507
2017-10-04 16:44:07 +02:00
Anders Jonsson
9822c4c1d6 Update Swedish translation 2017-10-02 18:49:00 +00:00
Cheng-Chia Tseng
1510640067 Update Chinese (Taiwan) translation 2017-10-01 14:27:01 +00:00
Arash Mousavi
15f0e05db4 [L10N] Update Persian translation 2017-10-01 17:05:05 +03:30
Athul R T
e2ecae466b Update Malayalam translation 2017-09-30 11:42:58 +00:00
Florian Müllner
f453b3780f tools: Remove obsolete check-for-missing script
The script was used by a distcheck hook to check for files that are
in git, but not the distributed tarball. We dropped autotools support,
so the script is no longer used - in fact, it isn't useful anymore,
as `ninja dist` generates tarballs from git itself rather than from
a separately maintained list of files ...
2017-09-30 03:18:55 +02:00
Mario Sanchez Prada
b5f5a594ba shell-app: Don't transition to STOPPED while still in the STARTING state
Similar to what it's done in _shell_app_add_window(), rely on calling
shell_app_sync_running_state() when removing windows too, to avoid
transitioning to STOPPED while it's still in the STARTING state.

This makes the logic compliant with the startup notification spec and
prevents stopping an application too early if it has a splash screen
that has been closed before the application's main window is shown.

https://bugzilla.gnome.org/show_bug.cgi?id=787905
2017-09-29 18:10:23 +01:00
Florian Müllner
6321bbb773 windowManager: Disable OSK gesture on lock screen
On the screen shield, the only possible interaction is lifting the
shield. The on-screen-keyboard is not useful for that, and the drag
gesture from the bottom may in fact conflict with dragging up the
shield, so disable it.

https://bugzilla.gnome.org/show_bug.cgi?id=788339
2017-09-29 15:59:10 +02:00
Florian Müllner
3eb80dc6c0 calendar: Make notification icons font-relative
As notification icons now align with the title, it makes sense for
them to follow the text size in case a text-scaling-factor other
than 1 is applied.

https://bugzilla.gnome.org/show_bug.cgi?id=788265
2017-09-29 15:59:10 +02:00
Mario Sanchez Prada
023b50e7a7 messageTray: Check monitor's existence before trying to update the state
Not doing this will throw a backtrace when running on headless mode and
trying to show a notification, due to Main.layoutManager.primaryMonitor
being undefined, so it's better to return early.

https://bugzilla.gnome.org/show_bug.cgi?id=730551
2017-09-28 16:32:00 +01:00
Sveinn í Felli
9a7dbfba99 Update Icelandic translation 2017-09-26 18:10:03 +00:00
Sveinn í Felli
a7021f993d Update Icelandic translation 2017-09-25 17:02:52 +00:00
Krzesimir Nowak
1ef8722c52 notificationDaemon: Guard against invalid D-Bus object paths
When making any D-Bus call through the GDBus' proxy wrapper with an
invalid D-Bus object path, gnome-shell hangs.

Supposedly FdoApplicationProxy constructor should validate the passed
D-Bus object path and throw an error if the path is invalid. Since it
does not do that, we work it around by making sure that the deduced
D-Bus object path is valid or throw an exception if the path is not.

https://bugzilla.gnome.org/show_bug.cgi?id=787902
2017-09-25 15:57:20 +01:00
Krzesimir Nowak
ce7ff27c0c notificationDaemon: Consider hyphens for app ID to object path translations
Some application IDs contain hyphens, which are not allowed in D-Bus object
paths, so we need to update the translation by converting them to something
that's a valid object path. This is consistent with what GApplication does.

https://bugzilla.gnome.org/show_bug.cgi?id=787902
2017-09-25 15:57:07 +01:00
Florian Müllner
de4c0bdca6 loginManager: Handle unset XDG_SESSION_ID more gracefully
While certain functionality won't be available when running outside a
(logind) user session, that's still better than crashing ...

https://bugzilla.gnome.org/show_bug.cgi?id=788046
2017-09-22 18:46:01 +02:00
Florian Müllner
ab0e98dfdd build: Use new mkenums_simple() function
As most libraries use the same mkenums templates, meson now added a
mkenums_simple() variant that works without providing the template.

https://bugzilla.gnome.org/show_bug.cgi?id=786343
2017-09-22 17:43:54 +02:00
Florian Müllner
2ae63691e9 meson: Use build_rpath instead of custom linker args
Meson now warns when specifying the rpath in linker flags instead
of using the newly added build_rpath option - now that we already
depend on the latest release, there's no reason anyway to not use
the nicer syntax.

https://bugzilla.gnome.org/show_bug.cgi?id=786343
2017-09-22 17:43:54 +02:00
Florian Müllner
9ecacdbded build: Update autotools-compat wrapper
mesontest is now deprecated in favor of the 'test' subcommand of the
main meson executable, so use that instead to wrap 'make check'.

https://bugzilla.gnome.org/show_bug.cgi?id=786343
2017-09-22 17:43:54 +02:00
Florian Müllner
9d01828b5b build: Require latest meson
Meson 0.42.0 fixes a build issue on systems that use Debian-style
multiarch, so require that.

https://bugzilla.gnome.org/show_bug.cgi?id=786343
2017-09-22 17:43:54 +02:00
Florian Müllner
7f381dd2fe st-icon: Remove some dead code 2017-09-22 17:43:54 +02:00
Jakub Steiner
fcdb73752e theme: re-render with sassc
pardon, pardon!
2017-09-22 17:41:18 +02:00
Jakub Steiner
ec9b2cef7d theme: panel corner opacity
- forgot to sync the corners

https://bugzilla.gnome.org/show_bug.cgi?id=787940
2017-09-22 17:36:07 +02:00
Florian Müllner
18f36b68ee Update sass submodule to the right commit 2017-09-22 17:31:22 +02:00
Jakub Steiner
f88e963edf add missing close button states
https://bugzilla.gnome.org/show_bug.cgi?id=788003
2017-09-22 17:13:07 +02:00
Jakub Steiner
6ecbaac0a8 theme: make top bar more legible
https://bugzilla.gnome.org/show_bug.cgi?id=787940
2017-09-22 17:13:07 +02:00
Florian Müllner
7015bb2ca9 shadow: Only use correctly sized textures for shortcut
When creating a shadow for a ClutterTexture, we currently use the
underlying CoglTexture directly instead of rendering the actor to
an offscreen buffer. This assumes that the CoglTexture is directly
suitable as shadow source, which isn't necessarily the case - it
may have a very different size than what is shown and scaled up or
down by the hardware. In that case we end up with a scaled shadow
texture as well, which messes up the desired blur effect - the
result will be too light when scaling up, or too sharp when scaling
down. To fix this, only take the shortcut when a ClutterTexture's
underlying texture has the correct size and fall back to offscreen
rendering otherwise.

https://bugzilla.gnome.org/show_bug.cgi?id=788039
2017-09-22 17:11:28 +02:00
Mario Sanchez Prada
703187e996 dnd: Prevent dividing by zero when calculating the scale factor
This ensures that we snap back to the correct size when the
source actor has been scaled to 0.

https://bugzilla.gnome.org/show_bug.cgi?id=787901
2017-09-22 15:50:07 +01:00
Arash Mousavi
d86a4dc43b Update Persian translation 2017-09-22 13:50:33 +00:00
Florian Müllner
f5a28c2f24 remoteSearch: Fix remote search providers
Commit 289f982949 broke all remote providers when adding support for
non-auto-started search providers: Whether the provider should be
auto-started needs to be known in the constructor, so setting the
property on the constructed object doesn't work.

https://bugzilla.gnome.org/show_bug.cgi?id=787986
2017-09-21 16:53:32 +02:00
Didier Roche
9f0bb526f7 Make key-above-tab in switcher more consistent
Ensure that key-above-tab for selecting window application is consistent
with the down key.
After focus an application in the switcher:
- if you press down, the window thumbnails are previewed, and first element
  is selected
- if you press key-above-tab, the window thumbnails are previewed, however
  the second element is directly selected.
Make both interactions always select the first element.

https://bugzilla.gnome.org/show_bug.cgi?id=786009
2017-09-19 20:09:20 +02:00
Florian Müllner
80151a7d64 dnd: Declare dragMonitors with var
It is used outside the DND module itself.

https://bugzilla.gnome.org/show_bug.cgi?id=787907
2017-09-19 20:07:21 +02:00
Florian Müllner
5a414fff44 windowManager: Remove excess parameter
https://bugzilla.gnome.org/show_bug.cgi?id=787907
2017-09-19 20:07:21 +02:00
Florian Müllner
2d11b5cea0 autorunManager: Avoid access to non-existent array element
https://bugzilla.gnome.org/show_bug.cgi?id=787907
2017-09-19 20:07:21 +02:00
Florian Müllner
ecddf1fffd Fix some more undefined property warnings
https://bugzilla.gnome.org/show_bug.cgi?id=787907
2017-09-19 20:07:21 +02:00
Ray Strode
90c55e1977 gtk-embed: ensure we only listen for window-created events once
If a tray icon gets a mapped and unmapped and the mapped again
in quick succession, we can end up with multiple handlers
listening for window creation events.

This commit tries to guard against that by only listening for
window-created events when we don't  know the actor associated
with the icon.

https://bugzilla.gnome.org/show_bug.cgi?id=787361
2017-09-15 15:32:46 -04:00
Stas Solovey
8331436ab3 Update Russian translation 2017-09-14 21:43:54 +00:00
Bastien Nocera
289f982949 remoteSearch: Allow search providers not to auto-start
This would be used by search providers which only operate on data in the
running instance, such as the terminal's search provider which finds the
shell in the tab matching the search text.

https://bugzilla.gnome.org/show_bug.cgi?id=785380
2017-09-14 17:03:14 +02:00
Khaled Hosny
e914d11a5f Update Arabic translation 2017-09-14 13:31:37 +02:00
Efstathios Iosifidis
e5ed0ab60f Update Greek translation 2017-09-12 19:49:52 +00:00
Marc-Antoine Perennou
5ec0ad4e9c StEntry: fix crash when hint actor is NULL
https://bugzilla.gnome.org/show_bug.cgi?id=787580

Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-09-12 21:39:30 +02:00
Florian Müllner
bddc2c0016 dateMenu: Use icon for message indicator
Using a unicode character here means it may look quite different
from the intended style (for instance with emoji fonts). Avoid
this by providing a custom icon and use that instead.

https://bugzilla.gnome.org/show_bug.cgi?id=766368
2017-09-12 17:32:51 +02:00
Florian Müllner
56f4ce37cd dateMenu: Adjust to GWeather IAPI change
It's not exactly clear what changed - gobject-introspection, gjs - but
the newly added gweather_condition_to_string_full() API no longer works
like it used to. The replacement code does look more idiomatic anyway,
so just fix the code without investigating the reason of the breakage.

https://bugzilla.gnome.org/show_bug.cgi?id=787423
2017-09-12 17:32:51 +02:00
Florian Müllner
053b8da89c app: Work around pkexec restriction when launching
Unless automatic child reaping is disabled in GSpawnFlags, glib's
g_spawn_* functions will reparent the spawned process to init by
double-forking. Unfortunately pkexec bails out in this case[0],
which means that it no longer works in .desktop files since the
PID tracking removal in commit 01c6392c13.
Fix this by going back to manual child reaping.

[0] https://cgit.freedesktop.org/polkit/tree/src/programs/pkexec.c#n728

https://bugzilla.gnome.org/show_bug.cgi?id=763531
2017-09-12 17:32:51 +02:00
66 changed files with 7460 additions and 4677 deletions

39
NEWS
View File

@@ -1,3 +1,42 @@
3.26.2
======
* Dump javascript stack on aborts, traps and segfaults [Marco; #789237]
* Misc. bug fixes [Jonas, Florian, Alessandro; #788607, #789018, #789231,
#788542, #789103]
Contributors:
Jonas Ådahl, Alessandro Bono, Florian Müllner, Marco Trevisan (Treviño)
Translations:
Xavi Ivars [ca@valencia], Fabio Tomat [fur], Matej Urbančič [sl],
Hannie Dumoleyn [nl]
3.26.1
======
* Don't detach launched apps to not break pkexec and friends [Florian; #763531]
* Allow search providers to not autostart [Bastien, Florian; #785380, #787986]
* Fix crash when tray icons are hidden/shown in quick succession [Ray; #787361]
* Make window group switcher more consistent [Didier; #786009]
* Improve legibility of the top bar when translucent [Jakub; #787940]
* Don't crash when running outside a logind session [Florian; #788046]
* Allow to run headless [Mario, Jonas; #730551]
* Update calendar on timezone changes [Martin; #678507]
* Improve keyboard navigation of window previews [Florian; #786546]
* Run unit tests on `meson test` [Florian; #786497]
* Misc. bug fixes [Florian, Marc-Antoine, Mario, Jakub, Krzesimir; #787423,
#766368, #787580, #787907, #787901, #788039, #788003, #786343, #787902,
#788265, #788339, #787905, #788282, #787676]
Contributors:
Martin Andersson, Florian Müllner, Bastien Nocera, Krzesimir Nowak,
Marc-Antoine Perennou, Didier Roche, Mario Sanchez Prada, Jakub Steiner,
Ray Strode
Translations:
Efstathios Iosifidis [el], Khaled Hosny [ar], Stas Solovey [ru],
Arash Mousavi [fa], Sveinn í Felli [is], Athul R T [ml],
Cheng-Chia Tseng [zh_TW], Anders Jonsson [sv]
3.26.0 3.26.0
====== ======
* Misc. bug fixes [Ray, Michael, Jonas; #786332] #786783, #786886, #786868] * Misc. bug fixes [Ray, Michael, Jonas; #786332] #786783, #786886, #786868]

3
configure vendored
View File

@@ -52,7 +52,6 @@ sanitycheck() {
} }
sanitycheck MESON 'meson' sanitycheck MESON 'meson'
sanitycheck MESONTEST 'mesontest'
sanitycheck NINJA 'ninja' 'ninja-build' sanitycheck NINJA 'ninja' 'ninja-build'
enable_docs='-Denable-gtk-doc=false' enable_docs='-Denable-gtk-doc=false'
@@ -121,7 +120,7 @@ install:
DESTDIR="\$(DESTDIR)" ${NINJA} ${NINJA_OPT} install DESTDIR="\$(DESTDIR)" ${NINJA} ${NINJA_OPT} install
check: check:
${MESONTEST} ${NINJA_OPT} ${MESON} test ${NINJA_OPT}
END END
echo "Summary:" echo "Summary:"

View File

@@ -9,6 +9,8 @@
<file>checkbox-off.svg</file> <file>checkbox-off.svg</file>
<file>checkbox.svg</file> <file>checkbox.svg</file>
<file>close-window.svg</file> <file>close-window.svg</file>
<file>close-window-active.svg</file>
<file>close-window-hover.svg</file>
<file>close.svg</file> <file>close.svg</file>
<file>corner-ripple-ltr.png</file> <file>corner-ripple-ltr.png</file>
<file>corner-ripple-rtl.png</file> <file>corner-ripple-rtl.png</file>
@@ -18,6 +20,7 @@
<file>gnome-shell.css</file> <file>gnome-shell.css</file>
<file>gnome-shell-high-contrast.css</file> <file>gnome-shell-high-contrast.css</file>
<file>logged-in-indicator.svg</file> <file>logged-in-indicator.svg</file>
<file alias="icons/message-indicator-symbolic.svg">message-indicator-symbolic.svg</file>
<file>no-events.svg</file> <file>no-events.svg</file>
<file>no-notifications.svg</file> <file>no-notifications.svg</file>
<file>noise-texture.png</file> <file>noise-texture.png</file>

View File

@@ -78,11 +78,18 @@ install_data('50-gnome-shell-system.xml', install_dir: keysdir)
schemaconf = configuration_data() schemaconf = configuration_data()
schemaconf.set('GETTEXT_PACKAGE', meson.project_name()) schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
configure_file( schema = configure_file(
input: 'org.gnome.shell.gschema.xml.in', input: 'org.gnome.shell.gschema.xml.in',
output: 'org.gnome.shell.gschema.xml', output: 'org.gnome.shell.gschema.xml',
configuration: schemaconf, configuration: schemaconf,
install_dir: schemadir install_dir: schemadir
) )
# for unit tests - gnome.compile_schemas() only looks in srcdir
custom_target('compile-schemas',
input: schema,
output: 'gschemas.compiled',
command: [find_program('glib-compile-schemas'), meson.current_build_dir()],
build_by_default: true)
install_data('gnome-shell-overrides.convert', install_dir: convertdir) install_data('gnome-shell-overrides.convert', install_dir: convertdir)

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Foreground"
x="0px"
y="0px"
width="32"
height="32"
viewBox="0 0 32 32"
enable-background="new 0 0 16 16"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="close-window-active.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata2399"><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><defs
id="defs2397"><linearGradient
id="linearGradient3173"><stop
style="stop-color:#c4c4c4;stop-opacity:1;"
offset="0"
id="stop3175" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3177" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 11 : 1"
inkscape:vp_y="0 : 1375 : 0"
inkscape:vp_z="22 : 11 : 1"
inkscape:persp3d-origin="11 : 7.3333334 : 1"
id="perspective2401" /></defs><sodipodi:namedview
inkscape:window-height="1106"
inkscape:window-width="1700"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#797979"
id="base"
showgrid="false"
inkscape:zoom="4"
inkscape:cx="28.483745"
inkscape:cy="67.714004"
inkscape:window-x="1427"
inkscape:window-y="127"
inkscape:current-layer="Foreground"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:window-maximized="0"
inkscape:document-rotation="0"><inkscape:grid
type="xygrid"
id="grid11246"
empspacing="32"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
d="m 4.4362021,16 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 C 9.6090297,27.607281 4.4362021,22.410122 4.4362021,16 Z"
id="path883"
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#a5c8ec;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" /><path
d="m 11.718386,11.764547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,16.018351 12.015167,13.61116 C 11.79279,13.405784 11.69527,13.116003 11.71839,12.819755 Z"
inkscape:connector-curvature="0"
id="path887"
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
sodipodi:nodetypes="ccsccccccccccccccccccccccc" /></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Foreground"
x="0px"
y="0px"
width="32"
height="32"
viewBox="0 0 32 32"
enable-background="new 0 0 16 16"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="close-window-hover.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata2399"><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 /></cc:Work></rdf:RDF></metadata><defs
id="defs2397"><linearGradient
id="linearGradient3173"><stop
style="stop-color:#c4c4c4;stop-opacity:1;"
offset="0"
id="stop3175" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3177" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 11 : 1"
inkscape:vp_y="0 : 1375 : 0"
inkscape:vp_z="22 : 11 : 1"
inkscape:persp3d-origin="11 : 7.3333334 : 1"
id="perspective2401" /></defs><sodipodi:namedview
inkscape:window-height="1106"
inkscape:window-width="1700"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#797979"
id="base"
showgrid="false"
inkscape:zoom="4"
inkscape:cx="28.483745"
inkscape:cy="67.714004"
inkscape:window-x="1427"
inkscape:window-y="127"
inkscape:current-layer="Foreground"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:window-maximized="0"
inkscape:document-rotation="0"><inkscape:grid
type="xygrid"
id="grid11246"
empspacing="32"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssc"
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#2975c4;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path822"
d="m 4.4362021,16 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 C 9.6090297,27.607281 4.4362021,22.410122 4.4362021,16 Z" /><path
sodipodi:nodetypes="ccsccccccccccccccccccccccc"
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
id="path826"
inkscape:connector-curvature="0"
d="m 11.718386,11.764547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,16.018351 12.015167,13.61116 C 11.79279,13.405784 11.69527,13.116003 11.71839,12.819755 Z" /></svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -19,7 +19,7 @@
enable-background="new 0 0 16 16" enable-background="new 0 0 16 16"
xml:space="preserve" xml:space="preserve"
sodipodi:version="0.32" sodipodi:version="0.32"
inkscape:version="0.92+devel unknown" inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="close-window.svg" sodipodi:docname="close-window.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata2399"><rdf:RDF><cc:Work id="metadata2399"><rdf:RDF><cc:Work
@@ -39,8 +39,8 @@
inkscape:vp_z="22 : 11 : 1" inkscape:vp_z="22 : 11 : 1"
inkscape:persp3d-origin="11 : 7.3333334 : 1" inkscape:persp3d-origin="11 : 7.3333334 : 1"
id="perspective2401" /></defs><sodipodi:namedview id="perspective2401" /></defs><sodipodi:namedview
inkscape:window-height="1376" inkscape:window-height="1106"
inkscape:window-width="3440" inkscape:window-width="1700"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:pageopacity="0" inkscape:pageopacity="0"
guidetolerance="10.0" guidetolerance="10.0"
@@ -51,28 +51,27 @@
pagecolor="#797979" pagecolor="#797979"
id="base" id="base"
showgrid="false" showgrid="false"
inkscape:zoom="8" inkscape:zoom="4"
inkscape:cx="-17.664395" inkscape:cx="28.483745"
inkscape:cy="7.2420799" inkscape:cy="67.714004"
inkscape:window-x="0" inkscape:window-x="1427"
inkscape:window-y="27" inkscape:window-y="127"
inkscape:current-layer="Foreground" inkscape:current-layer="Foreground"
showguides="true" showguides="true"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
borderlayer="true" borderlayer="true"
inkscape:showpageshadow="false" inkscape:showpageshadow="false"
inkscape:window-maximized="1" inkscape:window-maximized="0"
inkscape:document-rotation="0"><inkscape:grid inkscape:document-rotation="0"><inkscape:grid
type="xygrid" type="xygrid"
id="grid11246" id="grid11246"
empspacing="5" empspacing="32"
visible="true" visible="true"
enabled="true" enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
clip-rule="evenodd" d="m 4.4362021,15.860384 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 -6.3801083,0 -11.5529359,-5.197159 -11.5529359,-11.607281 z"
d="m 4.4362021,15.860384 c 0,-6.410121 5.1728276,-11.6072804 11.5529359,-11.6072804 6.380109,0 11.552937,5.1971594 11.552937,11.6072804 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 -6.3801083,0 -11.5529359,-5.197159 -11.5529359,-11.607281 z"
id="path2394-32" id="path2394-32"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="csssc" sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" /><path inkscape:connector-curvature="0" /><path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.49900004;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.74932218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.49900004;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.74932218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -647,7 +647,7 @@ StScrollBar {
border: 1px solid #215d9c; } border: 1px solid #215d9c; }
.tile-preview-left.on-primary { .tile-preview-left.on-primary {
border-radius: 6px 6px 0 0; } border-radius: 6px 0 0 0; }
.tile-preview-right.on-primary { .tile-preview-right.on-primary {
border-radius: 0 6px 0 0; } border-radius: 0 6px 0 0; }
@@ -657,7 +657,7 @@ StScrollBar {
/* TOP BAR */ /* TOP BAR */
#panel { #panel {
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.35);
/* transition from solid to transparent */ /* transition from solid to transparent */
transition-duration: 500ms; transition-duration: 500ms;
font-weight: bold; font-weight: bold;
@@ -668,7 +668,7 @@ StScrollBar {
spacing: 4px; } spacing: 4px; }
#panel .panel-corner { #panel .panel-corner {
-panel-corner-radius: 6px; -panel-corner-radius: 6px;
-panel-corner-background-color: rgba(0, 0, 0, 0.2); -panel-corner-background-color: rgba(0, 0, 0, 0.35);
-panel-corner-border-width: 2px; -panel-corner-border-width: 2px;
-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 {
@@ -682,7 +682,7 @@ StScrollBar {
-minimum-hpadding: 6px; -minimum-hpadding: 6px;
font-weight: bold; font-weight: bold;
color: #eee; color: #eee;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9); text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
transition-duration: 100ms; } transition-duration: 100ms; }
#panel .panel-button .app-menu-icon { #panel .panel-button .app-menu-icon {
-st-icon-style: symbolic; -st-icon-style: symbolic;
@@ -691,14 +691,14 @@ StScrollBar {
#panel .panel-button .system-status-icon, #panel .panel-button .system-status-icon,
#panel .panel-button .app-menu-icon > StIcon, #panel .panel-button .app-menu-icon > StIcon,
#panel .panel-button .popup-menu-arrow { #panel .panel-button .popup-menu-arrow {
icon-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9); } icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); }
#panel .panel-button:hover { #panel .panel-button:hover {
color: white; color: white;
text-shadow: 0px 0px 8px black; } text-shadow: 0px 1px 6px black; }
#panel .panel-button:hover .system-status-icon, #panel .panel-button:hover .system-status-icon,
#panel .panel-button:hover .app-menu-icon > StIcon, #panel .panel-button:hover .app-menu-icon > StIcon,
#panel .panel-button:hover .popup-menu-arrow { #panel .panel-button:hover .popup-menu-arrow {
icon-shadow: 0px 0px 8px black; } icon-shadow: 0px 1px 6px black; }
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked { #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
background-color: rgba(0, 0, 0, 0.01); background-color: rgba(0, 0, 0, 0.01);
box-shadow: inset 0 -2px 0px #256ab1; box-shadow: inset 0 -2px 0px #256ab1;
@@ -918,17 +918,17 @@ StScrollBar {
background-color: #0d0d0d; } background-color: #0d0d0d; }
.message-icon-bin { .message-icon-bin {
padding: 10px 3px 10px 10px; } padding: 0.68em 0.2em 0.68em 0.68em; }
.message-icon-bin:rtl { .message-icon-bin:rtl {
padding: 10px 10px 10px 3px; } padding: 0.68em 0.68em 0.68em 0.2em; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
color: #cccccc; color: #cccccc;
icon-size: 16px; icon-size: 1.09em;
-st-icon-style: symbolic; } -st-icon-style: symbolic; }
.message-secondary-bin { .message-secondary-bin {
padding: 0 12px; } padding: 0 0.82em; }
.message-secondary-bin > .event-time { .message-secondary-bin > .event-time {
color: #999999; color: #999999;
@@ -938,7 +938,7 @@ StScrollBar {
padding-bottom: 0.13em; } padding-bottom: 0.13em; }
.message-secondary-bin > StIcon { .message-secondary-bin > StIcon {
icon-size: 16px; } icon-size: 1.09em; }
.message-title { .message-title {
color: #f2f2f2; } color: #f2f2f2; }
@@ -1025,12 +1025,12 @@ StScrollBar {
background-image: url("resource:///org/gnome/shell/theme/close-window.svg"); background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
background-size: 32px; background-size: 32px;
height: 32px; height: 32px;
width: 32px; } width: 32px;
.window-close {
-shell-close-overlap: 16px; } -shell-close-overlap: 16px; }
.window-close:rtl { .window-close:hover {
-st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); } background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); }
.window-close:active {
background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); }
/* NETWORK DIALOGS */ /* NETWORK DIALOGS */
.nm-dialog { .nm-dialog {
@@ -1339,6 +1339,10 @@ StScrollBar {
border-radius: 9px 0 0 9px; } border-radius: 9px 0 0 9px; }
.workspace-thumbnails:rtl { .workspace-thumbnails:rtl {
border-radius: 0 9px 9px 0; } border-radius: 0 9px 9px 0; }
.workspace-thumbnails .placeholder {
background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
background-size: contain;
height: 24px; }
.workspace-thumbnail-indicator { .workspace-thumbnail-indicator {
border: 4px solid #215d9c; border: 4px solid #215d9c;

View File

@@ -647,7 +647,7 @@ StScrollBar {
border: 1px solid #215d9c; } border: 1px solid #215d9c; }
.tile-preview-left.on-primary { .tile-preview-left.on-primary {
border-radius: 6px 6px 0 0; } border-radius: 6px 0 0 0; }
.tile-preview-right.on-primary { .tile-preview-right.on-primary {
border-radius: 0 6px 0 0; } border-radius: 0 6px 0 0; }
@@ -657,7 +657,7 @@ StScrollBar {
/* TOP BAR */ /* TOP BAR */
#panel { #panel {
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.35);
/* transition from solid to transparent */ /* transition from solid to transparent */
transition-duration: 500ms; transition-duration: 500ms;
font-weight: bold; font-weight: bold;
@@ -668,7 +668,7 @@ StScrollBar {
spacing: 4px; } spacing: 4px; }
#panel .panel-corner { #panel .panel-corner {
-panel-corner-radius: 6px; -panel-corner-radius: 6px;
-panel-corner-background-color: rgba(0, 0, 0, 0.2); -panel-corner-background-color: rgba(0, 0, 0, 0.35);
-panel-corner-border-width: 2px; -panel-corner-border-width: 2px;
-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 {
@@ -682,7 +682,7 @@ StScrollBar {
-minimum-hpadding: 6px; -minimum-hpadding: 6px;
font-weight: bold; font-weight: bold;
color: #eee; color: #eee;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9); text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
transition-duration: 100ms; } transition-duration: 100ms; }
#panel .panel-button .app-menu-icon { #panel .panel-button .app-menu-icon {
-st-icon-style: symbolic; -st-icon-style: symbolic;
@@ -691,14 +691,14 @@ StScrollBar {
#panel .panel-button .system-status-icon, #panel .panel-button .system-status-icon,
#panel .panel-button .app-menu-icon > StIcon, #panel .panel-button .app-menu-icon > StIcon,
#panel .panel-button .popup-menu-arrow { #panel .panel-button .popup-menu-arrow {
icon-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9); } icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); }
#panel .panel-button:hover { #panel .panel-button:hover {
color: white; color: white;
text-shadow: 0px 0px 8px black; } text-shadow: 0px 1px 6px black; }
#panel .panel-button:hover .system-status-icon, #panel .panel-button:hover .system-status-icon,
#panel .panel-button:hover .app-menu-icon > StIcon, #panel .panel-button:hover .app-menu-icon > StIcon,
#panel .panel-button:hover .popup-menu-arrow { #panel .panel-button:hover .popup-menu-arrow {
icon-shadow: 0px 0px 8px black; } icon-shadow: 0px 1px 6px black; }
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked { #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
background-color: rgba(0, 0, 0, 0.01); background-color: rgba(0, 0, 0, 0.01);
box-shadow: inset 0 -2px 0px #256ab1; box-shadow: inset 0 -2px 0px #256ab1;
@@ -918,17 +918,17 @@ StScrollBar {
background-color: #454c4c; } background-color: #454c4c; }
.message-icon-bin { .message-icon-bin {
padding: 10px 3px 10px 10px; } padding: 0.68em 0.2em 0.68em 0.68em; }
.message-icon-bin:rtl { .message-icon-bin:rtl {
padding: 10px 10px 10px 3px; } padding: 0.68em 0.68em 0.68em 0.2em; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
color: #bebeb6; color: #bebeb6;
icon-size: 16px; icon-size: 1.09em;
-st-icon-style: symbolic; } -st-icon-style: symbolic; }
.message-secondary-bin { .message-secondary-bin {
padding: 0 12px; } padding: 0 0.82em; }
.message-secondary-bin > .event-time { .message-secondary-bin > .event-time {
color: #8e8e80; color: #8e8e80;
@@ -938,7 +938,7 @@ StScrollBar {
padding-bottom: 0.13em; } padding-bottom: 0.13em; }
.message-secondary-bin > StIcon { .message-secondary-bin > StIcon {
icon-size: 16px; } icon-size: 1.09em; }
.message-title { .message-title {
color: #e2e2df; } color: #e2e2df; }
@@ -1025,12 +1025,12 @@ StScrollBar {
background-image: url("resource:///org/gnome/shell/theme/close-window.svg"); background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
background-size: 32px; background-size: 32px;
height: 32px; height: 32px;
width: 32px; } width: 32px;
.window-close {
-shell-close-overlap: 16px; } -shell-close-overlap: 16px; }
.window-close:rtl { .window-close:hover {
-st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); } background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); }
.window-close:active {
background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); }
/* NETWORK DIALOGS */ /* NETWORK DIALOGS */
.nm-dialog { .nm-dialog {
@@ -1339,6 +1339,10 @@ StScrollBar {
border-radius: 9px 0 0 9px; } border-radius: 9px 0 0 9px; }
.workspace-thumbnails:rtl { .workspace-thumbnails:rtl {
border-radius: 0 9px 9px 0; } border-radius: 0 9px 9px 0; }
.workspace-thumbnails .placeholder {
background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
background-size: contain;
height: 24px; }
.workspace-thumbnail-indicator { .workspace-thumbnail-indicator {
border: 4px solid #215d9c; border: 4px solid #215d9c;

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333333 4.2333333"
version="1.1"
id="svg8">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
style="display:inline"
transform="translate(0,-292.76667)">
<path
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.17969394"
d="m 3.1749998,294.88333 a 1.0583333,1.0583333 0 0 1 -1.0583332,1.05833 1.0583333,1.0583333 0 0 1 -1.0583333,-1.05833 1.0583333,1.0583333 0 0 1 1.0583333,-1.05833 1.0583333,1.0583333 0 0 1 1.0583332,1.05833 z"
id="path4485" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -402,6 +402,40 @@ var SessionMenuButton = new Lang.Class({
}); });
Signals.addSignalMethods(SessionMenuButton.prototype); Signals.addSignalMethods(SessionMenuButton.prototype);
var GuestUser = new Lang.Class({
Name: 'GuestUser',
_init: function() {
this.is_loaded = true;
this.locked = false;
},
connect: function() {
},
disconnect: function() {
},
is_system_account: function() {
return false;
},
get_icon_file: function() {
return null; // FIXME: Use an icon for guest?
},
get_real_name: function() {
return 'Guest'; // FIXME: Translatable
},
get_user_name: function() {
return '*guest'; // FIXME: No a real username...
},
is_logged_in: function() {
return false; // FIXME: Can be logged in..
}
});
var LoginDialog = new Lang.Class({ var LoginDialog = new Lang.Class({
Name: 'LoginDialog', Name: 'LoginDialog',
@@ -446,6 +480,8 @@ var LoginDialog = new Lang.Class({
x_fill: true, x_fill: true,
y_fill: true }); y_fill: true });
this._guestUser = new GuestUser();
this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient, AuthPrompt.AuthPromptMode.UNLOCK_OR_LOG_IN); this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient, AuthPrompt.AuthPromptMode.UNLOCK_OR_LOG_IN);
this._authPrompt.connect('prompted', Lang.bind(this, this._onPrompted)); this._authPrompt.connect('prompted', Lang.bind(this, this._onPrompted));
this._authPrompt.connect('reset', Lang.bind(this, this._onReset)); this._authPrompt.connect('reset', Lang.bind(this, this._onReset));
@@ -1204,6 +1240,7 @@ var LoginDialog = new Lang.Class({
for (let i = 0; i < users.length; i++) { for (let i = 0; i < users.length; i++) {
this._userList.addUser(users[i]); this._userList.addUser(users[i]);
} }
this._userList.addUser(this._guestUser);
this._updateDisableUserList(); this._updateDisableUserList();

View File

@@ -423,7 +423,21 @@ var ShellUserVerifier = new Lang.Class({
_startService: function(serviceName) { _startService: function(serviceName) {
this._hold.acquire(); this._hold.acquire();
if (this._userName) { if (this._userName == "*guest") {
this._userVerifier.call_begin_verification_for_guest(this._cancellable,
Lang.bind(this, function(obj, result) {
try {
obj.call_begin_verification_for_guest_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
return;
} catch(e) {
this._reportInitError('Failed to start verification for guest', e);
return;
}
this._hold.release();
}));
} else if (this._userName) {
this._userVerifier.call_begin_verification_for_user(serviceName, this._userVerifier.call_begin_verification_for_user(serviceName,
this._userName, this._userName,
this._cancellable, this._cancellable,

View File

@@ -119,7 +119,13 @@ var LoginManagerSystemd = new Lang.Class({
return; return;
} }
this._proxy.GetSessionRemote(GLib.getenv('XDG_SESSION_ID'), Lang.bind(this, let sessionId = GLib.getenv('XDG_SESSION_ID');
if (!sessionId) {
log('Unset XDG_SESSION_ID, getCurrentSessionProxy() called outside a user session.');
return;
}
this._proxy.GetSessionRemote(sessionId, Lang.bind(this,
function(result, error) { function(result, error) {
if (error) { if (error) {
logError(error, 'Could not get a proxy for the current session'); logError(error, 'Could not get a proxy for the current session');

View File

@@ -158,6 +158,9 @@ var AppSwitcherPopup = new Lang.Class({
_keyPressHandler: function(keysym, action) { _keyPressHandler: function(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_GROUP) { if (action == Meta.KeyBindingAction.SWITCH_GROUP) {
if (!this._thumbnailsFocused)
this._select(this._selectedIndex, 0);
else
this._select(this._selectedIndex, this._nextWindow()); this._select(this._selectedIndex, this._nextWindow());
} else if (action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) { } else if (action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) {
this._select(this._selectedIndex, this._previousWindow()); this._select(this._selectedIndex, this._previousWindow());

View File

@@ -20,7 +20,7 @@ var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
var SHOW_WEEKDATE_KEY = 'show-weekdate'; var SHOW_WEEKDATE_KEY = 'show-weekdate';
var ELLIPSIS_CHAR = '\u2026'; var ELLIPSIS_CHAR = '\u2026';
var MESSAGE_ICON_SIZE = 16; var MESSAGE_ICON_SIZE = -1; // pick up from CSS
// alias to prevent xgettext from picking up strings translated in GTK+ // alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext; const gtk30_ = Gettext_gtk30.gettext;
@@ -428,6 +428,13 @@ var Calendar = new Lang.Class({
this.emit('selected-date-changed', new Date(this._selectedDate)); this.emit('selected-date-changed', new Date(this._selectedDate));
}, },
updateTimeZone: function() {
// The calendar need to be rebuilt after a time zone update because
// the date might have changed.
this._rebuildCalendar();
this._update();
},
_buildHeader: function() { _buildHeader: function() {
let layout = this.actor.layout_manager; let layout = this.actor.layout_manager;
let offsetCols = this._useWeekdate ? 1 : 0; let offsetCols = this._useWeekdate ? 1 : 0;

View File

@@ -255,7 +255,11 @@ var AutorunDispatcher = new Lang.Class({
if (!shouldAutorunMount(mount)) if (!shouldAutorunMount(mount))
return; return;
let setting = this._getAutorunSettingForType(contentTypes[0]); let setting;
if (contentTypes.length > 0)
setting = this._getAutorunSettingForType(contentTypes[0]);
else
setting = AutorunSetting.ASK;
// check at the settings for the first content type // check at the settings for the first content type
// to see whether we should ask // to see whether we should ask

View File

@@ -50,6 +50,10 @@ var DashItemContainer = new Lang.Class({
this._childScale = 0; this._childScale = 0;
this._childOpacity = 0; this._childOpacity = 0;
this.animatingOut = false; this.animatingOut = false;
this.connect('destroy', () => {
this.label.destroy();
});
}, },
vfunc_allocate: function(box, flags) { vfunc_allocate: function(box, flags) {
@@ -177,16 +181,8 @@ var DashItemContainer = new Lang.Class({
}); });
}, },
destroy: function() {
if (this.label)
this.label.destroy();
this.parent();
},
animateOutAndDestroy: function() { animateOutAndDestroy: function() {
if (this.label) this.label.hide();
this.label.destroy();
if (this.child == null) { if (this.child == null) {
this.destroy(); this.destroy();

View File

@@ -22,6 +22,7 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Calendar = imports.ui.calendar; const Calendar = imports.ui.calendar;
const Weather = imports.misc.weather; const Weather = imports.misc.weather;
const System = imports.system;
function _isToday(date) { function _isToday(date) {
let now = new Date(); let now = new Date();
@@ -131,7 +132,10 @@ var WorldClocksSection = new Lang.Class({
let world = GWeather.Location.get_world(); let world = GWeather.Location.get_world();
let clocks = settings.get_value('world-clocks').deep_unpack(); let clocks = settings.get_value('world-clocks').deep_unpack();
for (let i = 0; i < clocks.length; i++) { for (let i = 0; i < clocks.length; i++) {
if (!clocks[i].location)
continue;
let l = world.deserialize(clocks[i].location); let l = world.deserialize(clocks[i].location);
if (l)
this._locations.push({ location: l }); this._locations.push({ location: l });
} }
@@ -237,12 +241,14 @@ var WeatherSection = new Lang.Class({
let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION
: GWeather.FormatOptions.NO_CAPITALIZATION; : GWeather.FormatOptions.NO_CAPITALIZATION;
let [ok, phenom, qualifier] = info.get_value_conditions(); let [ok, phenomenon, qualifier] = info.get_value_conditions();
if (ok) if (ok)
return GWeather.conditions_to_string_full(phenom, qualifier, options); return new GWeather.Conditions({ significant: true,
phenomenon,
qualifier }).to_string_full(options);
let [, sky] = info.get_value_sky(); let [, sky] = info.get_value_sky();
return GWeather.sky_to_string_full(sky, options); return GWeather.Sky.to_string_full(sky, options);
}, },
_sameSummary: function(info1, info2) { _sameSummary: function(info1, info2) {
@@ -337,7 +343,9 @@ var MessagesIndicator = new Lang.Class({
Name: 'MessagesIndicator', Name: 'MessagesIndicator',
_init: function() { _init: function() {
this.actor = new St.Label({ text: '⚫', visible: false, y_expand: true, this.actor = new St.Icon({ icon_name: 'message-indicator-symbolic',
icon_size: 16,
visible: false, y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this._sources = []; this._sources = [];
@@ -543,6 +551,7 @@ var DateMenuButton = new Lang.Class({
this._clock = new GnomeDesktop.WallClock(); this._clock = new GnomeDesktop.WallClock();
this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE); this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE);
this._clock.connect('notify::timezone', Lang.bind(this, this._updateTimeZone));
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated)); Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated(); this._sessionUpdated();
@@ -562,6 +571,15 @@ var DateMenuButton = new Lang.Class({
this._eventSource = eventSource; this._eventSource = eventSource;
}, },
_updateTimeZone: function() {
// SpiderMonkey caches the time zone so we must explicitly clear it
// before we can update the calendar, see
// https://bugzilla.gnome.org/show_bug.cgi?id=678507
System.clearDateCaches();
this._calendar.updateTimeZone();
},
_sessionUpdated: function() { _sessionUpdated: function() {
let eventSource; let eventSource;
let showEvents = Main.sessionMode.showCalendarEvents; let showEvents = Main.sessionMode.showCalendarEvents;

View File

@@ -15,6 +15,8 @@ var Dialog = new Lang.Class({
this.parent({ layout_manager: new Clutter.BinLayout() }); this.parent({ layout_manager: new Clutter.BinLayout() });
this.connect('destroy', Lang.bind(this, this._onDestroy)); this.connect('destroy', Lang.bind(this, this._onDestroy));
this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0;
this._pressedKey = null; this._pressedKey = null;
this._buttonKeys = {}; this._buttonKeys = {};
this._createDialog(); this._createDialog();
@@ -86,6 +88,22 @@ var Dialog = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, },
_setInitialKeyFocus: function(actor) {
if (this._initialKeyFocus)
this._initialKeyFocus.disconnect(this._initialKeyFocusDestroyId);
this._initialKeyFocus = actor;
this._initialKeyFocusDestroyId = actor.connect('destroy', () => {
this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0;
});
},
get initialKeyFocus() {
return this._initialKeyFocus || this;
},
addContent: function (actor) { addContent: function (actor) {
this.contentLayout.add (actor, { expand: true }); this.contentLayout.add (actor, { expand: true });
}, },
@@ -116,8 +134,8 @@ var Dialog = new Lang.Class({
if (isDefault) if (isDefault)
button.add_style_pseudo_class('default'); button.add_style_pseudo_class('default');
if (!this._initialKeyFocusDestroyId) if (this._initialKeyFocus == null || isDefault)
this._initialKeyFocus = button; this._setInitialKeyFocus(button);
for (let i in keys) for (let i in keys)
this._buttonKeys[keys[i]] = buttonInfo; this._buttonKeys[keys[i]] = buttonInfo;

View File

@@ -38,10 +38,10 @@ var DragDropResult = {
SUCCESS: 1, SUCCESS: 1,
CONTINUE: 2 CONTINUE: 2
}; };
var dragMonitors = [];
let eventHandlerActor = null; let eventHandlerActor = null;
let currentDraggable = null; let currentDraggable = null;
let dragMonitors = [];
function _getEventHandlerActor() { function _getEventHandlerActor() {
if (!eventHandlerActor) { if (!eventHandlerActor) {
@@ -94,6 +94,7 @@ var _Draggable = new Lang.Class({
this.disconnectAll(); this.disconnectAll();
})); }));
this._onEventId = null; this._onEventId = null;
this._touchSequence = null;
this._restoreOnSuccess = params.restoreOnSuccess; this._restoreOnSuccess = params.restoreOnSuccess;
this._dragActorMaxSize = params.dragActorMaxSize; this._dragActorMaxSize = params.dragActorMaxSize;
@@ -530,7 +531,7 @@ var _Draggable = new Lang.Class({
// Snap the clone back to its source // Snap the clone back to its source
[x, y] = this._dragActorSource.get_transformed_position(); [x, y] = this._dragActorSource.get_transformed_position();
let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size(); let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size();
scale = this._dragActor.width / sourceScaledWidth; scale = sourceScaledWidth ? this._dragActor.width / sourceScaledWidth : 0;
} else if (this._dragOrigParent) { } else if (this._dragOrigParent) {
// Snap the actor back to its original position within // Snap the actor back to its original position within
// its parent, adjusting for the fact that the parent // its parent, adjusting for the fact that the parent

View File

@@ -129,6 +129,9 @@ var MonitorConstraint = new Lang.Class({
if (!this._primary && this._index < 0) if (!this._primary && this._index < 0)
return; return;
if (!Main.layoutManager.primaryMonitor)
return;
let index; let index;
if (this._primary) if (this._primary)
index = Main.layoutManager.primaryIndex; index = Main.layoutManager.primaryIndex;
@@ -189,6 +192,7 @@ var LayoutManager = new Lang.Class({
this._topActors = []; this._topActors = [];
this._isPopupWindowVisible = false; this._isPopupWindowVisible = false;
this._startingUp = true; this._startingUp = true;
this._pendingLoadBackground = false;
// We don't want to paint the stage background color because either // We don't want to paint the stage background color because either
// the SystemBackground we create or the MetaBackgroundActor inside // the SystemBackground we create or the MetaBackgroundActor inside
@@ -323,7 +327,9 @@ var LayoutManager = new Lang.Class({
for (let i = 0; i < nMonitors; i++) for (let i = 0; i < nMonitors; i++)
this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i))); this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i)));
if (nMonitors == 1) { if (nMonitors == 0) {
this.primaryIndex = this.bottomIndex = -1;
} else if (nMonitors == 1) {
this.primaryIndex = this.bottomIndex = 0; this.primaryIndex = this.bottomIndex = 0;
} else { } else {
// If there are monitors below the primary, then we need // If there are monitors below the primary, then we need
@@ -337,8 +343,18 @@ var LayoutManager = new Lang.Class({
} }
} }
} }
if (this.primaryIndex != -1) {
this.primaryMonitor = this.monitors[this.primaryIndex]; this.primaryMonitor = this.monitors[this.primaryIndex];
this.bottomMonitor = this.monitors[this.bottomIndex]; this.bottomMonitor = this.monitors[this.bottomIndex];
if (this._pendingLoadBackground) {
this._loadBackground();
this._pendingLoadBackground = false;
}
} else {
this.primaryMonitor = null;
this.bottomMonitor = null;
}
}, },
_updateHotCorners: function() { _updateHotCorners: function() {
@@ -458,6 +474,9 @@ var LayoutManager = new Lang.Class({
this.screenShieldGroup.set_position(0, 0); this.screenShieldGroup.set_position(0, 0);
this.screenShieldGroup.set_size(global.screen_width, global.screen_height); this.screenShieldGroup.set_size(global.screen_width, global.screen_height);
if (!this.primaryMonitor)
return;
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y); this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1); this.panelBox.set_size(this.primaryMonitor.width, -1);
@@ -480,6 +499,9 @@ var LayoutManager = new Lang.Class({
this._rightPanelBarrier = null; this._rightPanelBarrier = null;
} }
if (!this.primaryMonitor)
return;
if (this.panelBox.height) { if (this.panelBox.height) {
let primary = this.primaryMonitor; let primary = this.primaryMonitor;
@@ -549,6 +571,10 @@ var LayoutManager = new Lang.Class({
}, },
_loadBackground: function() { _loadBackground: function() {
if (!this.primaryMonitor) {
this._pendingLoadBackground = true;
return;
}
this._systemBackground = new Background.SystemBackground(); this._systemBackground = new Background.SystemBackground();
this._systemBackground.actor.hide(); this._systemBackground.actor.hide();

View File

@@ -122,6 +122,7 @@ function start() {
sessionMode.connect('updated', _sessionUpdated); sessionMode.connect('updated', _sessionUpdated);
Gtk.Settings.get_default().connect('notify::gtk-theme-name', Gtk.Settings.get_default().connect('notify::gtk-theme-name',
_loadDefaultStylesheet); _loadDefaultStylesheet);
Gtk.IconTheme.get_default().add_resource_path('/org/gnome/shell/theme/icons');
_initializeUI(); _initializeUI();
shellAccessDialogDBusService = new AccessDialog.AccessDialogDBus(); shellAccessDialogDBusService = new AccessDialog.AccessDialogDBus();

View File

@@ -1205,8 +1205,9 @@ var MessageTray = new Lang.Class({
// _updateState() figures out what (if anything) needs to be done // _updateState() figures out what (if anything) needs to be done
// at the present time. // at the present time.
_updateState: function() { _updateState: function() {
this.actor.visible = !this._bannerBlocked && this._banner != null; let hasMonitor = Main.layoutManager.primaryMonitor != null;
if (this._bannerBlocked) this.actor.visible = !this._bannerBlocked && hasMonitor && this._banner != null;
if (this._bannerBlocked || !hasMonitor)
return; return;
// If our state changes caused _updateState to be called, // If our state changes caused _updateState to be called,

View File

@@ -84,7 +84,7 @@ var ModalDialog = new Lang.Class({
} }
global.focus_manager.add_group(this.dialogLayout); global.focus_manager.add_group(this.dialogLayout);
this._initialKeyFocus = this.dialogLayout; this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
this._savedKeyFocus = null; this._savedKeyFocus = null;
}, },
@@ -157,7 +157,7 @@ var ModalDialog = new Lang.Class({
this._initialKeyFocus = actor; this._initialKeyFocus = actor;
this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() { this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() {
this._initialKeyFocus = this.dialogLayout; this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
})); }));
}, },
@@ -237,7 +237,8 @@ var ModalDialog = new Lang.Class({
this._savedKeyFocus.grab_key_focus(); this._savedKeyFocus.grab_key_focus();
this._savedKeyFocus = null; this._savedKeyFocus = null;
} else { } else {
this._initialKeyFocus.grab_key_focus(); let focus = this._initialKeyFocus || this.dialogLayout.initialKeyFocus;
focus.grab_key_focus();
} }
if (!this._shellReactive) if (!this._shellReactive)

View File

@@ -670,7 +670,7 @@ const FdoApplicationIface = '<node> \
const FdoApplicationProxy = Gio.DBusProxy.makeProxyWrapper(FdoApplicationIface); const FdoApplicationProxy = Gio.DBusProxy.makeProxyWrapper(FdoApplicationIface);
function objectPathFromAppId(appId) { function objectPathFromAppId(appId) {
return '/' + appId.replace(/\./g, '/'); return '/' + appId.replace(/\./g, '/').replace(/-/g, '_');
} }
function getPlatformData() { function getPlatformData() {
@@ -687,6 +687,8 @@ var GtkNotificationDaemonAppSource = new Lang.Class({
_init: function(appId) { _init: function(appId) {
this._appId = appId; this._appId = appId;
this._objectPath = objectPathFromAppId(appId); this._objectPath = objectPathFromAppId(appId);
if (!GLib.Variant.is_object_path(this._objectPath))
throw new InvalidAppError();
this._app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop'); this._app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
if (!this._app) if (!this._app)

View File

@@ -392,6 +392,9 @@ var Overview = new Lang.Class({
// when it is next shown. // when it is next shown.
this.hide(); this.hide();
if (!Main.layoutManager.primaryMonitor)
return;
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
this._coverPane.set_position(0, workArea.y); this._coverPane.set_position(0, workArea.y);
@@ -414,7 +417,7 @@ var Overview = new Lang.Class({
beginItemDrag: function(source) { beginItemDrag: function(source) {
this.emit('item-drag-begin'); this.emit('item-drag-begin');
this._inDrag = true; this._inItemDrag = true;
}, },
cancelledItemDrag: function(source) { cancelledItemDrag: function(source) {
@@ -422,13 +425,15 @@ var Overview = new Lang.Class({
}, },
endItemDrag: function(source) { endItemDrag: function(source) {
if (!this._inItemDrag)
return;
this.emit('item-drag-end'); this.emit('item-drag-end');
this._inDrag = false; this._inItemDrag = false;
}, },
beginWindowDrag: function(window) { beginWindowDrag: function(window) {
this.emit('window-drag-begin', window); this.emit('window-drag-begin', window);
this._inDrag = true; this._inWindowDrag = true;
}, },
cancelledWindowDrag: function(window) { cancelledWindowDrag: function(window) {
@@ -436,8 +441,10 @@ var Overview = new Lang.Class({
}, },
endWindowDrag: function(window) { endWindowDrag: function(window) {
if (!this._inWindowDrag)
return;
this.emit('window-drag-end', window); this.emit('window-drag-end', window);
this._inDrag = false; this._inWindowDrag = false;
}, },
focusSearch: function() { focusSearch: function() {
@@ -481,7 +488,7 @@ var Overview = new Lang.Class({
shouldToggleByCornerOrButton: function() { shouldToggleByCornerOrButton: function() {
if (this.animationInProgress) if (this.animationInProgress)
return false; return false;
if (this._inDrag) if (this._inItemDrag || this._inWindowDrag)
return false; return false;
if (this._activationTime == 0 || Date.now() / 1000 - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT) if (this._activationTime == 0 || Date.now() / 1000 - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT)
return true; return true;

View File

@@ -839,8 +839,14 @@ var Panel = new Lang.Class({
}, },
_getPreferredWidth: function(actor, forHeight, alloc) { _getPreferredWidth: function(actor, forHeight, alloc) {
let primaryMonitor = Main.layoutManager.primaryMonitor;
alloc.min_size = -1; alloc.min_size = -1;
alloc.natural_size = Main.layoutManager.primaryMonitor.width;
if (primaryMonitor)
alloc.natural_size = primaryMonitor.width;
else
alloc.natural_size = -1;
}, },
_getPreferredHeight: function(actor, forWidth, alloc) { _getPreferredHeight: function(actor, forWidth, alloc) {
@@ -859,15 +865,16 @@ var Panel = new Lang.Class({
let sideWidth, centerWidth; let sideWidth, centerWidth;
centerWidth = centerNaturalWidth; centerWidth = centerNaturalWidth;
sideWidth = (allocWidth - centerWidth) / 2; sideWidth = Math.max(0, (allocWidth - centerWidth) / 2);
let childBox = new Clutter.ActorBox(); let childBox = new Clutter.ActorBox();
childBox.y1 = 0; childBox.y1 = 0;
childBox.y2 = allocHeight; childBox.y2 = allocHeight;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL) { if (this.actor.get_text_direction() == Clutter.TextDirection.RTL) {
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth), childBox.x1 = Math.max(allocWidth - Math.min(Math.floor(sideWidth),
leftNaturalWidth); leftNaturalWidth),
0);
childBox.x2 = allocWidth; childBox.x2 = allocWidth;
} else { } else {
childBox.x1 = 0; childBox.x1 = 0;
@@ -889,8 +896,9 @@ var Panel = new Lang.Class({
childBox.x2 = Math.min(Math.floor(sideWidth), childBox.x2 = Math.min(Math.floor(sideWidth),
rightNaturalWidth); rightNaturalWidth);
} else { } else {
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth), childBox.x1 = Math.max(allocWidth - Math.min(Math.floor(sideWidth),
rightNaturalWidth); rightNaturalWidth),
0);
childBox.x2 = allocWidth; childBox.x2 = allocWidth;
} }
this._rightBox.allocate(childBox, flags); this._rightBox.allocate(childBox, flags);
@@ -1044,6 +1052,9 @@ var Panel = new Lang.Class({
return; return;
} }
if (!Main.layoutManager.primaryMonitor)
return;
/* Get all the windows in the active workspace that are in the primary monitor and visible */ /* Get all the windows in the active workspace that are in the primary monitor and visible */
let activeWorkspace = global.screen.get_active_workspace(); let activeWorkspace = global.screen.get_active_workspace();
let windows = activeWorkspace.list_windows().filter(function(metaWindow) { let windows = activeWorkspace.list_windows().filter(function(metaWindow) {
@@ -1073,8 +1084,6 @@ var Panel = new Lang.Class({
let indicator = this.statusArea[role]; let indicator = this.statusArea[role];
if (!indicator) if (!indicator)
continue; continue;
if (indicator.menu)
indicator.menu.close();
indicator.container.hide(); indicator.container.hide();
} }
}, },

View File

@@ -405,7 +405,7 @@ var PopupImageMenuItem = new Lang.Class({
setIcon: function(icon) { setIcon: function(icon) {
// The 'icon' parameter can be either a Gio.Icon or a string. // The 'icon' parameter can be either a Gio.Icon or a string.
if (GObject.type_is_a(icon, Gio.Icon)) if (icon instanceof GObject.Object && GObject.type_is_a(icon, Gio.Icon))
this._icon.gicon = icon; this._icon.gicon = icon;
else else
this._icon.icon_name = icon; this._icon.icon_name = icon;
@@ -465,6 +465,7 @@ var PopupMenuBase = new Lang.Class({
_sessionUpdated: function() { _sessionUpdated: function() {
this._setSettingsVisibility(Main.sessionMode.allowSettings); this._setSettingsVisibility(Main.sessionMode.allowSettings);
this.close();
}, },
addAction: function(title, callback, icon) { addAction: function(title, callback, icon) {

View File

@@ -98,6 +98,13 @@ function loadRemoteSearchProviders(searchSettings, callback) {
return; return;
} }
let autoStart = true;
try {
autoStart = keyfile.get_boolean(group, 'AutoStart');
} catch(e) {
// ignore error
}
let version = '1'; let version = '1';
try { try {
version = keyfile.get_string(group, 'Version'); version = keyfile.get_string(group, 'Version');
@@ -106,9 +113,9 @@ function loadRemoteSearchProviders(searchSettings, callback) {
} }
if (version >= 2) if (version >= 2)
remoteProvider = new RemoteSearchProvider2(appInfo, busName, objectPath); remoteProvider = new RemoteSearchProvider2(appInfo, busName, objectPath, autoStart);
else else
remoteProvider = new RemoteSearchProvider(appInfo, busName, objectPath); remoteProvider = new RemoteSearchProvider(appInfo, busName, objectPath, autoStart);
remoteProvider.defaultEnabled = true; remoteProvider.defaultEnabled = true;
try { try {
@@ -184,17 +191,22 @@ function loadRemoteSearchProviders(searchSettings, callback) {
var RemoteSearchProvider = new Lang.Class({ var RemoteSearchProvider = new Lang.Class({
Name: 'RemoteSearchProvider', Name: 'RemoteSearchProvider',
_init: function(appInfo, dbusName, dbusPath, proxyInfo) { _init: function(appInfo, dbusName, dbusPath, autoStart, proxyInfo) {
if (!proxyInfo) if (!proxyInfo)
proxyInfo = SearchProviderProxyInfo; proxyInfo = SearchProviderProxyInfo;
let g_flags = Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES;
if (autoStart)
g_flags |= Gio.DBusProxyFlags.DO_NOT_AUTO_START_AT_CONSTRUCTION;
else
g_flags |= Gio.DBusProxyFlags.DO_NOT_AUTO_START;
this.proxy = new Gio.DBusProxy({ g_bus_type: Gio.BusType.SESSION, this.proxy = new Gio.DBusProxy({ g_bus_type: Gio.BusType.SESSION,
g_name: dbusName, g_name: dbusName,
g_object_path: dbusPath, g_object_path: dbusPath,
g_interface_info: proxyInfo, g_interface_info: proxyInfo,
g_interface_name: proxyInfo.name, g_interface_name: proxyInfo.name,
g_flags: (Gio.DBusProxyFlags.DO_NOT_AUTO_START_AT_CONSTRUCTION | g_flags });
Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
this.proxy.init_async(GLib.PRIORITY_DEFAULT, null, null); this.proxy.init_async(GLib.PRIORITY_DEFAULT, null, null);
this.appInfo = appInfo; this.appInfo = appInfo;
@@ -307,8 +319,8 @@ var RemoteSearchProvider2 = new Lang.Class({
Name: 'RemoteSearchProvider2', Name: 'RemoteSearchProvider2',
Extends: RemoteSearchProvider, Extends: RemoteSearchProvider,
_init: function(appInfo, dbusName, dbusPath) { _init: function(appInfo, dbusName, dbusPath, autoStart) {
this.parent(appInfo, dbusName, dbusPath, SearchProvider2ProxyInfo); this.parent(appInfo, dbusName, dbusPath, autoStart, SearchProvider2ProxyInfo);
this.canLaunchSearch = true; this.canLaunchSearch = true;
}, },

View File

@@ -529,6 +529,7 @@ var InputSourceManager = new Lang.Class({
let sources = this._settings.inputSources; let sources = this._settings.inputSources;
let nSources = sources.length; let nSources = sources.length;
this._currentSource = null;
this._inputSources = {}; this._inputSources = {};
this._ibusSources = {}; this._ibusSources = {};
@@ -827,6 +828,9 @@ var InputSourceIndicator = new Lang.Class({
for (let i in this._indicatorLabels) for (let i in this._indicatorLabels)
this._indicatorLabels[i].destroy(); this._indicatorLabels[i].destroy();
this._menuItems = {};
this._indicatorLabels = {};
let menuIndex = 0; let menuIndex = 0;
for (let i in this._inputSourceManager.inputSources) { for (let i in this._inputSourceManager.inputSources) {
let is = this._inputSourceManager.inputSources[i]; let is = this._inputSourceManager.inputSources[i];

View File

@@ -951,7 +951,7 @@ var NMWirelessDialog = new Lang.Class({
|| (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) { || (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
// 802.1x-enabled APs require further configuration, so they're // 802.1x-enabled APs require further configuration, so they're
// handled in gnome-control-center // handled in gnome-control-center
Util.spawn(['gnome-control-center', 'network', 'connect-8021x-wifi', Util.spawn(['gnome-control-center', 'wifi', 'connect-8021x-wifi',
this._device.get_path(), accessPoints[0].dbus_path]); this._device.get_path(), accessPoints[0].dbus_path]);
} else { } else {
let connection = new NetworkManager.Connection(); let connection = new NetworkManager.Connection();

View File

@@ -516,7 +516,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) { if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
let [dx, dy] = event.get_gesture_motion_delta(event); let [dx, dy] = event.get_gesture_motion_delta();
this._dx += dx; this._dx += dx;
this._dy += dy; this._dy += dy;
@@ -985,7 +985,8 @@ var WindowManager = new Lang.Class({
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);
gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM, Shell.ActionMode.ALL); let mode = Shell.ActionMode.ALL & ~Shell.ActionMode.LOCK_SCREEN;
gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM, mode);
gesture.connect('activated', Lang.bind(this, function() { gesture.connect('activated', Lang.bind(this, function() {
Main.keyboard.show(Main.layoutManager.bottomIndex); Main.keyboard.show(Main.layoutManager.bottomIndex);
})); }));

View File

@@ -132,6 +132,7 @@ var WindowClone = new Lang.Class({
this.actor._delegate = this; this.actor._delegate = this;
this.slotId = 0;
this._slot = [0, 0, 0, 0]; this._slot = [0, 0, 0, 0];
this._dragSlot = [0, 0, 0, 0]; this._dragSlot = [0, 0, 0, 0];
this._stackAbove = null; this._stackAbove = null;
@@ -661,6 +662,7 @@ var WindowOverlay = new Lang.Class({
if (this._hidden) if (this._hidden)
return; return;
this._windowClone.actor.grab_key_focus();
this._animateVisible(); this._animateVisible();
this.emit('show-close-button'); this.emit('show-close-button');
}, },
@@ -1068,6 +1070,22 @@ function rectEqual(one, two) {
one.height == two.height); one.height == two.height);
} }
const WorkspaceActor = new Lang.Class({
Name: 'WorkspaceActor',
Extends: St.Widget,
vfunc_get_focus_chain: function() {
return this.get_children().filter(c => c.visible).sort((a,b) => {
let cloneA = (a._delegate && a._delegate instanceof WindowClone) ? a._delegate: null;
let cloneB = (b._delegate && b._delegate instanceof WindowClone) ? b._delegate: null;
if (cloneA && cloneB)
return cloneA.slotId - cloneB.slotId;
return 0;
});
}
});
/** /**
* @metaWorkspace: a #Meta.Workspace, or null * @metaWorkspace: a #Meta.Workspace, or null
*/ */
@@ -1090,6 +1108,7 @@ var Workspace = new Lang.Class({
// do some simple aspect ratio like math to fit the layout calculated // do some simple aspect ratio like math to fit the layout calculated
// for the full geometry into this area. // for the full geometry into this area.
this._actualGeometry = null; this._actualGeometry = null;
this._actualGeometryLater = 0;
this._currentLayout = null; this._currentLayout = null;
@@ -1099,7 +1118,7 @@ var Workspace = new Lang.Class({
// Without this the drop area will be overlapped. // Without this the drop area will be overlapped.
this._windowOverlaysGroup.set_size(0, 0); this._windowOverlaysGroup.set_size(0, 0);
this.actor = new St.Widget({ style_class: 'window-picker' }); this.actor = new WorkspaceActor({ style_class: 'window-picker' });
if (monitorIndex != Main.layoutManager.primaryIndex) if (monitorIndex != Main.layoutManager.primaryIndex)
this.actor.add_style_class_name('external-monitor'); this.actor.add_style_class_name('external-monitor');
this.actor.set_size(0, 0); this.actor.set_size(0, 0);

View File

@@ -31,6 +31,7 @@ var WorkspaceSwitcherPopup = new Lang.Class({
this._itemSpacing = 0; this._itemSpacing = 0;
this._childHeight = 0; this._childHeight = 0;
this._childWidth = 0; this._childWidth = 0;
this._timeoutId = 0;
this._list.connect('style-changed', Lang.bind(this, function() { this._list.connect('style-changed', Lang.bind(this, function() {
this._itemSpacing = this._list.get_theme_node().get_length('spacing'); this._itemSpacing = this._list.get_theme_node().get_length('spacing');
})); }));

View File

@@ -937,7 +937,8 @@ var ThumbnailsBox = new Lang.Class({
}, },
addThumbnails: function(start, count) { addThumbnails: function(start, count) {
this._ensurePorthole(); if (!this._ensurePorthole())
return;
for (let k = start; k < start + count; k++) { for (let k = start; k < start + count; k++) {
let metaWorkspace = global.screen.get_workspace_by_index(k); let metaWorkspace = global.screen.get_workspace_by_index(k);
let thumbnail = new WorkspaceThumbnail(metaWorkspace); let thumbnail = new WorkspaceThumbnail(metaWorkspace);
@@ -1125,7 +1126,12 @@ var ThumbnailsBox = new Lang.Class({
// the size request to our children because we know how big they are and know // the size request to our children because we know how big they are and know
// that the actors aren't depending on the virtual functions being called. // that the actors aren't depending on the virtual functions being called.
this._ensurePorthole(); if (!this._ensurePorthole()) {
alloc.min_size = -1;
alloc.natural_size = -1;
return;
}
let themeNode = this.actor.get_theme_node(); let themeNode = this.actor.get_theme_node();
let spacing = themeNode.get_length('spacing'); let spacing = themeNode.get_length('spacing');
@@ -1137,7 +1143,11 @@ var ThumbnailsBox = new Lang.Class({
}, },
_getPreferredWidth: function(actor, forHeight, alloc) { _getPreferredWidth: function(actor, forHeight, alloc) {
this._ensurePorthole(); if (!this._ensurePorthole()) {
alloc.min_size = -1;
alloc.natural_size = -1;
return;
}
let themeNode = this.actor.get_theme_node(); let themeNode = this.actor.get_theme_node();
@@ -1158,8 +1168,13 @@ var ThumbnailsBox = new Lang.Class({
// The "porthole" is the portion of the screen that we show in the // The "porthole" is the portion of the screen that we show in the
// workspaces // workspaces
_ensurePorthole: function() { _ensurePorthole: function() {
if (!Main.layoutManager.primaryMonitor)
return false;
if (!this._porthole) if (!this._porthole)
this._porthole = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex); this._porthole = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
return true;
}, },
_allocate: function(actor, box, flags) { _allocate: function(actor, box, flags) {

View File

@@ -1,6 +1,6 @@
project('gnome-shell', 'c', project('gnome-shell', 'c',
version: '3.26.0', version: '3.26.2',
meson_version: '>= 0.41.0', meson_version: '>= 0.42.0',
license: 'GPLv2+' license: 'GPLv2+'
) )

1285
po/ar.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1319,7 +1319,7 @@ msgstr "Přehled"
#. characters. #. characters.
#: js/ui/overview.js:240 #: js/ui/overview.js:240
msgid "Type to search…" msgid "Type to search…"
msgstr "vyhledávejte psaním…" msgstr "Vyhledávejte psaním…"
#: js/ui/padOsd.js:103 #: js/ui/padOsd.js:103
msgid "New shortcut…" msgid "New shortcut…"

626
po/el.po

File diff suppressed because it is too large Load Diff

1089
po/fa.po

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: video-subtitles master\n" "Project-Id-Version: video-subtitles master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://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: 2017-08-22 11:17+0000\n" "POT-Creation-Date: 2017-10-04 18:03+0000\n"
"PO-Revision-Date: 2017-08-23 17:01+0200\n" "PO-Revision-Date: 2017-10-11 08:34+0200\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n" "Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian <fur@li.org>\n" "Language-Team: Friulian <fur@li.org>\n"
"Language: fur\n" "Language: fur\n"
@@ -659,12 +659,12 @@ msgstr "Zonte tai preferîts"
msgid "Show Details" msgid "Show Details"
msgstr "Mostre Detais" msgstr "Mostre Detais"
#: js/ui/appFavorites.js:140 #: js/ui/appFavorites.js:141
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s al è stât zontât tai tiei preferîts." msgstr "%s al è stât zontât tai tiei preferîts."
#: js/ui/appFavorites.js:174 #: js/ui/appFavorites.js:175
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s al è stât gjavât dai tiei preferîts." msgstr "%s al è stât gjavât dai tiei preferîts."
@@ -753,51 +753,51 @@ msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#: js/ui/calendar.js:442 #: js/ui/calendar.js:449
msgid "Previous month" msgid "Previous month"
msgstr "Mês indaûr" msgstr "Mês indaûr"
#: js/ui/calendar.js:452 #: js/ui/calendar.js:459
msgid "Next month" msgid "Next month"
msgstr "Prossim mês" msgstr "Prossim mês"
#: js/ui/calendar.js:605 #: js/ui/calendar.js:612
#, no-javascript-format #, no-javascript-format
msgctxt "date day number format" msgctxt "date day number format"
msgid "%d" msgid "%d"
msgstr "%d" msgstr "%d"
#: js/ui/calendar.js:660 #: js/ui/calendar.js:667
msgid "Week %V" msgid "Week %V"
msgstr "Setemane %V" msgstr "Setemane %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:729 #: js/ui/calendar.js:736
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Dut il dì" msgstr "Dut il dì"
#: js/ui/calendar.js:862 #: js/ui/calendar.js:869
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d di %B" msgstr "%A, %d di %B"
#: js/ui/calendar.js:866 #: js/ui/calendar.js:873
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d di %B dal %Y" msgstr "%A, %d di %B dal %Y"
#: js/ui/calendar.js:1086 #: js/ui/calendar.js:1093
msgid "No Notifications" msgid "No Notifications"
msgstr "Nissune notifiche" msgstr "Nissune notifiche"
#: js/ui/calendar.js:1089 #: js/ui/calendar.js:1096
msgid "No Events" msgid "No Events"
msgstr "Nissun event" msgstr "Nissun event"
#: js/ui/calendar.js:1117 #: js/ui/calendar.js:1124
msgid "Clear All" msgid "Clear All"
msgstr "Nete dut" msgstr "Nete dut"
@@ -831,7 +831,7 @@ msgstr "Dispositîf esterni tacât"
msgid "External drive disconnected" msgid "External drive disconnected"
msgstr "Dispositîf esterni distacât" msgstr "Dispositîf esterni distacât"
#: js/ui/components/autorunManager.js:354 #: js/ui/components/autorunManager.js:358
#, javascript-format #, javascript-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Vierç cun %s" msgstr "Vierç cun %s"
@@ -968,7 +968,7 @@ msgstr "Dash"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: js/ui/dateMenu.js:75 #: js/ui/dateMenu.js:76
msgid "%B %e %Y" msgid "%B %e %Y"
msgstr "%e di %B dal %Y" msgstr "%e di %B dal %Y"
@@ -976,19 +976,19 @@ msgstr "%e di %B dal %Y"
#. * below the time in the shell; it should combine the weekday and the #. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015". #. * date, e.g. "Tuesday February 17 2015".
#. #.
#: js/ui/dateMenu.js:82 #: js/ui/dateMenu.js:83
msgid "%A %B %e %Y" msgid "%A %B %e %Y"
msgstr "%A %e di %B dal %Y" msgstr "%A %e di %B dal %Y"
#: js/ui/dateMenu.js:144 #: js/ui/dateMenu.js:145
msgid "Add world clocks…" msgid "Add world clocks…"
msgstr "Zonte orlois mondiâi..." msgstr "Zonte orlois mondiâi..."
#: js/ui/dateMenu.js:145 #: js/ui/dateMenu.js:146
msgid "World Clocks" msgid "World Clocks"
msgstr "Orlois mondiâi" msgstr "Orlois mondiâi"
#: js/ui/dateMenu.js:224 #: js/ui/dateMenu.js:225
msgid "Weather" msgid "Weather"
msgstr "Timp" msgstr "Timp"
@@ -996,7 +996,7 @@ msgstr "Timp"
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:286 #: js/ui/dateMenu.js:289
#, javascript-format #, javascript-format
msgid "%s all day." msgid "%s all day."
msgstr "%s dut il dì." msgstr "%s dut il dì."
@@ -1005,7 +1005,7 @@ msgstr "%s dut il dì."
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:292 #: js/ui/dateMenu.js:295
#, javascript-format #, javascript-format
msgid "%s, then %s later." msgid "%s, then %s later."
msgstr "%s, plui tart %s." msgstr "%s, plui tart %s."
@@ -1014,30 +1014,30 @@ msgstr "%s, plui tart %s."
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:298 #: js/ui/dateMenu.js:301
#, javascript-format #, javascript-format
msgid "%s, then %s, followed by %s later." msgid "%s, then %s, followed by %s later."
msgstr "%s, chi di un pôc %s, e plui tart %s." msgstr "%s, chi di un pôc %s, e plui tart %s."
#: js/ui/dateMenu.js:309 #: js/ui/dateMenu.js:312
msgid "Select a location…" msgid "Select a location…"
msgstr "Selezione une posizion..." msgstr "Selezione une posizion..."
#: js/ui/dateMenu.js:312 #: js/ui/dateMenu.js:315
msgid "Loading…" msgid "Loading…"
msgstr "Daûr a cjariâ..." msgstr "Daûr a cjariâ..."
#. Translators: %s is a temperature with unit, e.g. "23℃" #. Translators: %s is a temperature with unit, e.g. "23℃"
#: js/ui/dateMenu.js:318 #: js/ui/dateMenu.js:321
#, javascript-format #, javascript-format
msgid "Feels like %s." msgid "Feels like %s."
msgstr "Si sint %s." msgstr "Si sint %s."
#: js/ui/dateMenu.js:321 #: js/ui/dateMenu.js:324
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Va in rêt pes informazions sul timp" msgstr "Va in rêt pes informazions sul timp"
#: js/ui/dateMenu.js:323 #: js/ui/dateMenu.js:326
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "Lis informazions sul timp al moment no son disponibilis" msgstr "Lis informazions sul timp al moment no son disponibilis"
@@ -1276,7 +1276,7 @@ msgstr "Viôt sorzint"
msgid "Web Page" msgid "Web Page"
msgstr "Pagjine Web" msgstr "Pagjine Web"
#: js/ui/messageTray.js:1493 #: js/ui/messageTray.js:1494
msgid "System Information" msgid "System Information"
msgstr "Informazion di sisteme" msgstr "Informazion di sisteme"
@@ -1449,12 +1449,11 @@ msgstr "Nissun risultât."
# o ancjemò %d # o ancjemò %d
#: js/ui/search.js:777 #: js/ui/search.js:777
#, fuzzy, javascript-format #, javascript-format
#| msgid "%d more"
msgid "%d more" msgid "%d more"
msgid_plural "%d more" msgid_plural "%d more"
msgstr[0] "Ancjemò %d" msgstr[0] "%d altri"
msgstr[1] "Ancjemò %d" msgstr[1] "%d altris"
#: js/ui/shellEntry.js:25 #: js/ui/shellEntry.js:25
msgid "Copy" msgid "Copy"

1024
po/is.po

File diff suppressed because it is too large Load Diff

3118
po/ml.po

File diff suppressed because it is too large Load Diff

575
po/nb.po

File diff suppressed because it is too large Load Diff

View File

@@ -15,8 +15,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-s" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-s"
"hell&keywords=I18N+L10N&component=general\n" "hell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-31 02:16+0000\n" "POT-Creation-Date: 2017-10-23 10:13+0000\n"
"PO-Revision-Date: 2017-09-01 10:25+0100\n" "PO-Revision-Date: 2017-10-25 10:55+0100\n"
"Last-Translator: Hannie Dumoleyn <hannie@ubuntu-nl.org>\n" "Last-Translator: Hannie Dumoleyn <hannie@ubuntu-nl.org>\n"
"Language-Team: Dutch <gnome-nl-list@gnome.org>\n" "Language-Team: Dutch <gnome-nl-list@gnome.org>\n"
"Language: nl\n" "Language: nl\n"
@@ -71,16 +71,16 @@ msgstr "Vensterbeheer en toepassingen starten"
#: data/org.gnome.shell.gschema.xml.in:6 #: data/org.gnome.shell.gschema.xml.in:6
msgid "Enable internal tools useful for developers and testers from Alt-F2" msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "" msgstr ""
"Interne hulpprogramma's inschakelen die nuttig zijn voor ontwikkwlaars en" "Interne hulpprogramma's inschakelen die nuttig zijn voor ontwikkwlaars en "
" testers via Alt-F2" "testers via Alt-F2"
#: data/org.gnome.shell.gschema.xml.in:9 #: data/org.gnome.shell.gschema.xml.in:9
msgid "" msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 " "Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog." "dialog."
msgstr "" msgstr ""
"Geeft toegang tot interne debugging- en observatieprogramma's met behulp van" "Geeft toegang tot interne debugging- en observatieprogramma's met behulp van "
" het Alt-F2-dialoogvenster." "het Alt-F2-dialoogvenster."
#: data/org.gnome.shell.gschema.xml.in:16 #: data/org.gnome.shell.gschema.xml.in:16
msgid "UUIDs of extensions to enable" msgid "UUIDs of extensions to enable"
@@ -107,8 +107,8 @@ msgid ""
"Disable all extensions the user has enabled without affecting the “enabled-" "Disable all extensions the user has enabled without affecting the “enabled-"
"extension” setting." "extension” setting."
msgstr "" msgstr ""
"Schakel alle door de gebruiker ingeschakelde uitbreidingen uit, zonder de" "Schakel alle door de gebruiker ingeschakelde uitbreidingen uit, zonder de "
" instelling enabled-extension te wijzigen." "instelling enabled-extension te wijzigen."
#: data/org.gnome.shell.gschema.xml.in:34 #: data/org.gnome.shell.gschema.xml.in:34
msgid "Disables the validation of extension version compatibility" msgid "Disables the validation of extension version compatibility"
@@ -122,8 +122,8 @@ msgid ""
msgstr "" msgstr ""
"Gnome Shell zal alleen uitbreidingen laden die aangeven de huidige versie te " "Gnome Shell zal alleen uitbreidingen laden die aangeven de huidige versie te "
"ondersteunen. Door deze optie in te schakelen wordt deze controle " "ondersteunen. Door deze optie in te schakelen wordt deze controle "
"overgeslagen en worden alle uitbreidingen geladen, ongeacht de versies die ze" "overgeslagen en worden alle uitbreidingen geladen, ongeacht de versies die "
" zouden moeten ondersteunen." "ze zouden moeten ondersteunen."
#: data/org.gnome.shell.gschema.xml.in:43 #: data/org.gnome.shell.gschema.xml.in:43
msgid "List of desktop file IDs for favorite applications" msgid "List of desktop file IDs for favorite applications"
@@ -134,8 +134,8 @@ msgid ""
"The applications corresponding to these identifiers will be displayed in the " "The applications corresponding to these identifiers will be displayed in the "
"favorites area." "favorites area."
msgstr "" msgstr ""
"De toepassingen die aan deze identifiers voldoen worden in het" "De toepassingen die aan deze identifiers voldoen worden in het "
" favorietengebied weergegeven." "favorietengebied weergegeven."
#: data/org.gnome.shell.gschema.xml.in:51 #: data/org.gnome.shell.gschema.xml.in:51
msgid "App Picker View" msgid "App Picker View"
@@ -171,8 +171,8 @@ msgstr ""
msgid "" msgid ""
"Whether to remember password for mounting encrypted or remote filesystems" "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "" msgstr ""
"Of wachtwoorden voor versleutelde bestandssystemen of bestandssystemen op" "Of wachtwoorden voor versleutelde bestandssystemen of bestandssystemen op "
" afstand onthouden moeten worden" "afstand onthouden moeten worden"
#: data/org.gnome.shell.gschema.xml.in:76 #: data/org.gnome.shell.gschema.xml.in:76
msgid "" msgid ""
@@ -310,8 +310,8 @@ msgstr "Deze waarde overschrijft de waarde in org.gnome.mutter in Gnome Shell."
#: data/org.gnome.shell.gschema.xml.in:206 #: data/org.gnome.shell.gschema.xml.in:206
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
"Vensters langs de randen positioneren bij verslepen naar de rand van het" "Vensters langs de randen positioneren bij verslepen naar de rand van het "
" scherm" "scherm"
#: data/org.gnome.shell.gschema.xml.in:214 #: data/org.gnome.shell.gschema.xml.in:214
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
@@ -755,51 +755,51 @@ msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "Z" msgstr "Z"
#: js/ui/calendar.js:442 #: js/ui/calendar.js:449
msgid "Previous month" msgid "Previous month"
msgstr "Vorige maand" msgstr "Vorige maand"
#: js/ui/calendar.js:452 #: js/ui/calendar.js:459
msgid "Next month" msgid "Next month"
msgstr "Volgende maand" msgstr "Volgende maand"
#: js/ui/calendar.js:605 #: js/ui/calendar.js:612
#, no-javascript-format #, no-javascript-format
msgctxt "date day number format" msgctxt "date day number format"
msgid "%d" msgid "%d"
msgstr "%d" msgstr "%d"
#: js/ui/calendar.js:660 #: js/ui/calendar.js:667
msgid "Week %V" msgid "Week %V"
msgstr "Week %V" msgstr "Week %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:729 #: js/ui/calendar.js:736
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Gehele dag" msgstr "Gehele dag"
#: js/ui/calendar.js:862 #: js/ui/calendar.js:869
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%a %d %B" msgstr "%a %d %B"
#: js/ui/calendar.js:866 #: js/ui/calendar.js:873
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:1086 #: js/ui/calendar.js:1093
msgid "No Notifications" msgid "No Notifications"
msgstr "Geen notificaties" msgstr "Geen notificaties"
#: js/ui/calendar.js:1089 #: js/ui/calendar.js:1096
msgid "No Events" msgid "No Events"
msgstr "Geen gebeurtenissen" msgstr "Geen gebeurtenissen"
#: js/ui/calendar.js:1117 #: js/ui/calendar.js:1124
msgid "Clear All" msgid "Clear All"
msgstr "Alles wissen" msgstr "Alles wissen"
@@ -814,8 +814,8 @@ msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
msgstr "" msgstr ""
"U kan even wachten tot de toepassing weer reageert, of ze dwingen" "U kan even wachten tot de toepassing weer reageert, of ze dwingen "
" onmiddellijk af te sluiten." "onmiddellijk af te sluiten."
#: js/ui/closeDialog.js:61 #: js/ui/closeDialog.js:61
msgid "Force Quit" msgid "Force Quit"
@@ -833,7 +833,7 @@ msgstr "Verbinding met externe schijf gemaakt"
msgid "External drive disconnected" msgid "External drive disconnected"
msgstr "Verbinding met externe schijf verbroken" msgstr "Verbinding met externe schijf verbroken"
#: js/ui/components/autorunManager.js:354 #: js/ui/components/autorunManager.js:358
#, javascript-format #, javascript-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Openen met %s" msgstr "Openen met %s"
@@ -972,7 +972,7 @@ msgstr "Zijbalk"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: js/ui/dateMenu.js:75 #: js/ui/dateMenu.js:76
msgid "%B %e %Y" msgid "%B %e %Y"
msgstr "%e %B %Y" msgstr "%e %B %Y"
@@ -980,19 +980,19 @@ msgstr "%e %B %Y"
#. * below the time in the shell; it should combine the weekday and the #. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015". #. * date, e.g. "Tuesday February 17 2015".
#. #.
#: js/ui/dateMenu.js:82 #: js/ui/dateMenu.js:83
msgid "%A %B %e %Y" msgid "%A %B %e %Y"
msgstr "%A %e %B %Y" msgstr "%A %e %B %Y"
#: js/ui/dateMenu.js:144 #: js/ui/dateMenu.js:145
msgid "Add world clocks…" msgid "Add world clocks…"
msgstr "Wereldklokken toevoegen…" msgstr "Wereldklokken toevoegen…"
#: js/ui/dateMenu.js:145 #: js/ui/dateMenu.js:146
msgid "World Clocks" msgid "World Clocks"
msgstr "Wereldklokken" msgstr "Wereldklokken"
#: js/ui/dateMenu.js:224 #: js/ui/dateMenu.js:225
msgid "Weather" msgid "Weather"
msgstr "Weer" msgstr "Weer"
@@ -1000,7 +1000,7 @@ msgstr "Weer"
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:286 #: js/ui/dateMenu.js:289
#, javascript-format #, javascript-format
msgid "%s all day." msgid "%s all day."
msgstr "De hele dag %s." msgstr "De hele dag %s."
@@ -1009,7 +1009,7 @@ msgstr "De hele dag %s."
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:292 #: js/ui/dateMenu.js:295
#, javascript-format #, javascript-format
msgid "%s, then %s later." msgid "%s, then %s later."
msgstr "%s, daarna %s." msgstr "%s, daarna %s."
@@ -1018,30 +1018,30 @@ msgstr "%s, daarna %s."
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:298 #: js/ui/dateMenu.js:301
#, javascript-format #, javascript-format
msgid "%s, then %s, followed by %s later." msgid "%s, then %s, followed by %s later."
msgstr "%s, daarna %s, gevolgd door %s." msgstr "%s, daarna %s, gevolgd door %s."
#: js/ui/dateMenu.js:309 #: js/ui/dateMenu.js:312
msgid "Select a location…" msgid "Select a location…"
msgstr "Selecteer een locatie…" msgstr "Selecteer een locatie…"
#: js/ui/dateMenu.js:312 #: js/ui/dateMenu.js:315
msgid "Loading…" msgid "Loading…"
msgstr "Laden…" msgstr "Laden…"
#. Translators: %s is a temperature with unit, e.g. "23℃" #. Translators: %s is a temperature with unit, e.g. "23℃"
#: js/ui/dateMenu.js:318 #: js/ui/dateMenu.js:321
#, javascript-format #, javascript-format
msgid "Feels like %s." msgid "Feels like %s."
msgstr "Voelt aan als %s." msgstr "Voelt aan als %s."
#: js/ui/dateMenu.js:321 #: js/ui/dateMenu.js:324
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Ga online voor informatie over het weer" msgstr "Ga online voor informatie over het weer"
#: js/ui/dateMenu.js:323 #: js/ui/dateMenu.js:326
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "Informatie over het weer is momenteel niet beschikbaar" msgstr "Informatie over het weer is momenteel niet beschikbaar"
@@ -1278,7 +1278,7 @@ msgstr "Broncode weergeven"
msgid "Web Page" msgid "Web Page"
msgstr "Webpagina" msgstr "Webpagina"
#: js/ui/messageTray.js:1493 #: js/ui/messageTray.js:1494
msgid "System Information" msgid "System Information"
msgstr "Systeeminformatie" msgstr "Systeeminformatie"
@@ -1369,7 +1369,7 @@ msgstr "Systeem"
#: js/ui/panel.js:812 #: js/ui/panel.js:812
msgid "Top Bar" msgid "Top Bar"
msgstr "Bovenbalk" msgstr "Menubalk"
#. Translators: this MUST be either "toggle-switch-us" #. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words #. (for toggle switches containing the English words
@@ -2042,19 +2042,19 @@ msgstr "Evolution-agenda"
msgid "evolution" msgid "evolution"
msgstr "evolution" msgstr "evolution"
#: src/main.c:380 #: src/main.c:429
msgid "Print version" msgid "Print version"
msgstr "Versie weergeven" msgstr "Versie weergeven"
#: src/main.c:386 #: src/main.c:435
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "De modus die door GDM voor het aanmeldscherm gebruikt wordt" msgstr "De modus die door GDM voor het aanmeldscherm gebruikt wordt"
#: src/main.c:392 #: src/main.c:441
msgid "Use a specific mode, e.g. “gdm” for login screen" msgid "Use a specific mode, e.g. “gdm” for login screen"
msgstr "Specifieke modus gebruiken, bijv. “gdm” voor het aanmeldscherm" msgstr "Specifieke modus gebruiken, bijv. “gdm” voor het aanmeldscherm"
#: src/main.c:398 #: src/main.c:447
msgid "List possible modes" msgid "List possible modes"
msgstr "Mogelijke modi tonen" msgstr "Mogelijke modi tonen"

572
po/ru.po

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://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: 2017-08-28 19:35+0200\n" "POT-Creation-Date: 2017-08-28 19:35+0200\n"
"PO-Revision-Date: 2017-08-28 19:38+0200\n" "PO-Revision-Date: 2017-10-14 20:09+0200\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: sl\n" "Language: sl\n"
@@ -20,7 +20,7 @@ msgstr ""
"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 2.0.1\n" "X-Generator: Poedit 2.0.4\n"
#: data/50-gnome-shell-system.xml:6 #: data/50-gnome-shell-system.xml:6
msgid "System" msgid "System"
@@ -363,7 +363,7 @@ msgstr "Izbor seje"
#. manually entering the username. #. manually entering the username.
#: js/gdm/loginDialog.js:458 #: js/gdm/loginDialog.js:458
msgid "Not listed?" msgid "Not listed?"
msgstr "Ali je ni na seznamu?" msgstr "Ali uporabniškega imena ni na seznamu?"
#. Translators: this message is shown below the username entry field #. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm #. to clue the user in on how to login to the local network realm
@@ -665,12 +665,12 @@ msgstr "Dodaj med priljubljene"
msgid "Show Details" msgid "Show Details"
msgstr "Pokaži besedilo" msgstr "Pokaži besedilo"
#: js/ui/appFavorites.js:140 #: js/ui/appFavorites.js:141
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "Program »%s« je dodan med priljubljeno." msgstr "Program »%s« je dodan med priljubljeno."
#: js/ui/appFavorites.js:174 #: js/ui/appFavorites.js:175
#, javascript-format #, javascript-format
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."
@@ -759,51 +759,51 @@ msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#: js/ui/calendar.js:442 #: js/ui/calendar.js:449
msgid "Previous month" msgid "Previous month"
msgstr "Predhodni mesec" msgstr "Predhodni mesec"
#: js/ui/calendar.js:452 #: js/ui/calendar.js:459
msgid "Next month" msgid "Next month"
msgstr "Naslednji mesec" msgstr "Naslednji mesec"
#: js/ui/calendar.js:605 #: js/ui/calendar.js:612
#, no-javascript-format #, no-javascript-format
msgctxt "date day number format" msgctxt "date day number format"
msgid "%d" msgid "%d"
msgstr "%d" msgstr "%d"
#: js/ui/calendar.js:660 #: js/ui/calendar.js:667
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:729 #: js/ui/calendar.js:736
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Celodnevno" msgstr "Celodnevno"
#: js/ui/calendar.js:862 #: js/ui/calendar.js:869
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:866 #: js/ui/calendar.js:873
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:1086 #: js/ui/calendar.js:1093
msgid "No Notifications" msgid "No Notifications"
msgstr "Ni obvestil" msgstr "Ni obvestil"
#: js/ui/calendar.js:1089 #: js/ui/calendar.js:1096
msgid "No Events" msgid "No Events"
msgstr "Ni dogodkov" msgstr "Ni dogodkov"
#: js/ui/calendar.js:1117 #: js/ui/calendar.js:1124
msgid "Clear All" msgid "Clear All"
msgstr "Počisti vse" msgstr "Počisti vse"
@@ -837,7 +837,7 @@ msgstr "Zunanji pogon je priklopljen"
msgid "External drive disconnected" msgid "External drive disconnected"
msgstr "Zunanji pogon je odklopljen" msgstr "Zunanji pogon je odklopljen"
#: js/ui/components/autorunManager.js:354 #: js/ui/components/autorunManager.js:358
#, javascript-format #, javascript-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Odpri s programom %s" msgstr "Odpri s programom %s"
@@ -914,7 +914,7 @@ msgstr "Za napravo mobilnega širokopasovnega dostopa je zahtevana koda PIN."
#: js/ui/components/networkAgent.js:313 #: js/ui/components/networkAgent.js:313
msgid "PIN: " msgid "PIN: "
msgstr "PIN: " msgstr "Koda PIN: "
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:659 #: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:659
msgid "Mobile broadband network password" msgid "Mobile broadband network password"
@@ -974,7 +974,7 @@ msgstr "Pregledna plošča"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: js/ui/dateMenu.js:75 #: js/ui/dateMenu.js:76
msgid "%B %e %Y" msgid "%B %e %Y"
msgstr "%B %e %Y" msgstr "%B %e %Y"
@@ -982,19 +982,19 @@ msgstr "%B %e %Y"
#. * below the time in the shell; it should combine the weekday and the #. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015". #. * date, e.g. "Tuesday February 17 2015".
#. #.
#: js/ui/dateMenu.js:82 #: js/ui/dateMenu.js:83
msgid "%A %B %e %Y" msgid "%A %B %e %Y"
msgstr "%A %B %e %Y" msgstr "%A %B %e %Y"
#: js/ui/dateMenu.js:144 #: js/ui/dateMenu.js:145
msgid "Add world clocks…" msgid "Add world clocks…"
msgstr "Dodaj svetovni čas ..." msgstr "Dodaj svetovni čas ..."
#: js/ui/dateMenu.js:145 #: js/ui/dateMenu.js:146
msgid "World Clocks" msgid "World Clocks"
msgstr "Svetovni časi" msgstr "Svetovni časi"
#: js/ui/dateMenu.js:224 #: js/ui/dateMenu.js:225
msgid "Weather" msgid "Weather"
msgstr "Vreme" msgstr "Vreme"
@@ -1002,7 +1002,7 @@ msgstr "Vreme"
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:286 #: js/ui/dateMenu.js:289
#, javascript-format #, javascript-format
msgid "%s all day." msgid "%s all day."
msgstr "%s ves dan." msgstr "%s ves dan."
@@ -1011,7 +1011,7 @@ msgstr "%s ves dan."
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:292 #: js/ui/dateMenu.js:295
#, javascript-format #, javascript-format
msgid "%s, then %s later." msgid "%s, then %s later."
msgstr "%s, sledi %s." msgstr "%s, sledi %s."
@@ -1020,30 +1020,30 @@ msgstr "%s, sledi %s."
#. libgweather for the possible condition strings. If at all #. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of #. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions. #. the inserted conditions.
#: js/ui/dateMenu.js:298 #: js/ui/dateMenu.js:301
#, javascript-format #, javascript-format
msgid "%s, then %s, followed by %s later." msgid "%s, then %s, followed by %s later."
msgstr "%s, sledi %s, kasneje tudi %s." msgstr "%s, sledi %s, kasneje tudi %s."
#: js/ui/dateMenu.js:309 #: js/ui/dateMenu.js:312
msgid "Select a location…" msgid "Select a location…"
msgstr "Izbor mesta ..." msgstr "Izbor mesta ..."
#: js/ui/dateMenu.js:312 #: js/ui/dateMenu.js:315
msgid "Loading…" msgid "Loading…"
msgstr "Poteka nalaganje ..." msgstr "Poteka nalaganje ..."
#. Translators: %s is a temperature with unit, e.g. "23℃" #. Translators: %s is a temperature with unit, e.g. "23℃"
#: js/ui/dateMenu.js:318 #: js/ui/dateMenu.js:321
#, javascript-format #, javascript-format
msgid "Feels like %s." msgid "Feels like %s."
msgstr "Občuti se kot %s." msgstr "Občuti se kot %s."
#: js/ui/dateMenu.js:321 #: js/ui/dateMenu.js:324
msgid "Go online for weather information" msgid "Go online for weather information"
msgstr "Preglej splet za podrobnosti o vremenu." msgstr "Preglej splet za podrobnosti o vremenu."
#: js/ui/dateMenu.js:323 #: js/ui/dateMenu.js:326
msgid "Weather information is currently unavailable" msgid "Weather information is currently unavailable"
msgstr "Podatki o vremenu trenutno niso na voljo." msgstr "Podatki o vremenu trenutno niso na voljo."
@@ -1293,7 +1293,7 @@ msgstr "Poglej vir"
msgid "Web Page" msgid "Web Page"
msgstr "Spletna stran" msgstr "Spletna stran"
#: js/ui/messageTray.js:1493 #: js/ui/messageTray.js:1494
msgid "System Information" msgid "System Information"
msgstr "Podrobnosti sistema" msgstr "Podrobnosti sistema"
@@ -1951,7 +1951,7 @@ msgstr "Le vgrajeno"
#: js/ui/unlockDialog.js:67 #: js/ui/unlockDialog.js:67
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Prijava kot drug uporabnik" msgstr "Prijavi z drugim uporabniškim imenom"
#: js/ui/unlockDialog.js:84 #: js/ui/unlockDialog.js:84
msgid "Unlock Window" msgid "Unlock Window"

View File

@@ -12,16 +12,16 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://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: 2017-09-08 09:41+0000\n" "POT-Creation-Date: 2017-09-09 11:09+0000\n"
"PO-Revision-Date: 2017-09-09 13:07+0200\n" "PO-Revision-Date: 2017-10-02 20:48+0200\n"
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n" "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.3\n" "X-Generator: Poedit 2.0.4\n"
#: data/50-gnome-shell-system.xml:6 #: data/50-gnome-shell-system.xml:6
msgid "System" msgid "System"
@@ -1983,7 +1983,7 @@ msgstr "Ändra storlek"
#: js/ui/windowMenu.js:65 #: js/ui/windowMenu.js:65
msgid "Move Titlebar Onscreen" msgid "Move Titlebar Onscreen"
msgstr "Flytta titelrad på skärm" msgstr "Flytta namnlist på skärm"
#: js/ui/windowMenu.js:70 #: js/ui/windowMenu.js:70
msgid "Always on Top" msgid "Always on Top"

View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell 3.3.90\n" "Project-Id-Version: gnome-shell 3.3.90\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://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: 2017-08-22 11:17+0000\n" "POT-Creation-Date: 2017-08-27 05:39+0000\n"
"PO-Revision-Date: 2017-08-27 13:31+0800\n" "PO-Revision-Date: 2017-10-01 22:25+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n" "Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n" "Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
"Language: zh_TW\n" "Language: zh_TW\n"
@@ -413,7 +413,6 @@ msgstr "暫停"
#. Translators: A list of keywords that match the suspend action, separated by semicolons #. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:123 #: js/misc/systemActions.js:123
#| msgid "Suspend"
msgid "suspend;sleep" msgid "suspend;sleep"
msgstr "suspend;sleep;暫停;睡眠" msgstr "suspend;sleep;暫停;睡眠"
@@ -425,7 +424,6 @@ msgstr "切換使用者"
#. Translators: A list of keywords that match the switch user action, separated by semicolons #. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:130 #: js/misc/systemActions.js:130
#| msgid "Switch User"
msgid "switch user" msgid "switch user"
msgstr "switch user;切換使用者" msgstr "switch user;切換使用者"
@@ -524,7 +522,7 @@ msgstr "%A %H%M"
#: js/misc/util.js:246 #: js/misc/util.js:246
#, no-c-format #, no-c-format
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%b%d日 %H%M" msgstr "%b%d日 %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
@@ -532,7 +530,7 @@ msgstr "%b月%d日 %H%M"
#: js/misc/util.js:252 #: js/misc/util.js:252
#, no-c-format #, no-c-format
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%Y年%b%d日 %H:%M" msgstr "%Y年%b%d日 %H:%M"
#. Translators: Time in 12h format #. Translators: Time in 12h format
#: js/misc/util.js:257 #: js/misc/util.js:257
@@ -559,7 +557,7 @@ msgstr "%A%p %l%M"
#: js/misc/util.js:275 #: js/misc/util.js:275
#, no-c-format #, no-c-format
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%b%d日%p %l%M" msgstr "%b%d日%p %l%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
@@ -567,7 +565,7 @@ msgstr "%b月%d日%p %l%M"
#: js/misc/util.js:281 #: js/misc/util.js:281
#, no-c-format #, no-c-format
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%Y年%b%d日%p %l%M" msgstr "%Y年%b%d日%p %l%M"
#. TRANSLATORS: this is the title of the wifi captive portal login window #. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:66 #: js/portalHelper/main.js:66
@@ -747,12 +745,12 @@ msgstr "整天"
#: js/ui/calendar.js:862 #: js/ui/calendar.js:862
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%b%d日%A" msgstr "%b%d日%A"
#: js/ui/calendar.js:866 #: js/ui/calendar.js:866
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%Y年%b%d日%A" msgstr "%Y年%b%d日%A"
#: js/ui/calendar.js:1086 #: js/ui/calendar.js:1086
msgid "No Notifications" msgid "No Notifications"
@@ -931,7 +929,7 @@ msgstr "Dash"
#. #.
#: js/ui/dateMenu.js:75 #: js/ui/dateMenu.js:75
msgid "%B %e %Y" msgid "%B %e %Y"
msgstr "%Y年%b%e日" msgstr "%Y年%b%e日"
#. Translators: This is the accessible name of the date button shown #. Translators: This is the accessible name of the date button shown
#. * below the time in the shell; it should combine the weekday and the #. * below the time in the shell; it should combine the weekday and the
@@ -939,7 +937,7 @@ msgstr "%Y年%b月%e日"
#. #.
#: js/ui/dateMenu.js:82 #: js/ui/dateMenu.js:82
msgid "%A %B %e %Y" msgid "%A %B %e %Y"
msgstr "%Y年%b%e日%A" msgstr "%Y年%b%e日%A"
#: js/ui/dateMenu.js:144 #: js/ui/dateMenu.js:144
msgid "Add world clocks…" msgid "Add world clocks…"
@@ -1347,7 +1345,7 @@ msgstr "重新啟動…"
#. long format #. long format
#: js/ui/screenShield.js:88 #: js/ui/screenShield.js:88
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%b%d日%A" msgstr "%b%d日%A"
#: js/ui/screenShield.js:147 #: js/ui/screenShield.js:147
#, javascript-format #, javascript-format

View File

@@ -38,14 +38,17 @@ extern GType gnome_shell_plugin_get_type (void);
static gboolean is_gdm_mode = FALSE; static gboolean is_gdm_mode = FALSE;
static char *session_mode = NULL; static char *session_mode = NULL;
static int caught_signal = 0;
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 #define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4 #define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
enum { enum {
SHELL_DEBUG_BACKTRACE_WARNINGS = 1, SHELL_DEBUG_BACKTRACE_WARNINGS = 1,
SHELL_DEBUG_BACKTRACE_SEGFAULTS = 2,
}; };
static int _shell_debug; static int _shell_debug;
static gboolean _tracked_signals[NSIG] = { 0 };
static void static void
shell_dbus_acquire_name (GDBusProxy *bus, shell_dbus_acquire_name (GDBusProxy *bus,
@@ -290,7 +293,8 @@ static void
shell_init_debug (const char *debug_env) shell_init_debug (const char *debug_env)
{ {
static const GDebugKey keys[] = { static const GDebugKey keys[] = {
{ "backtrace-warnings", SHELL_DEBUG_BACKTRACE_WARNINGS } { "backtrace-warnings", SHELL_DEBUG_BACKTRACE_WARNINGS },
{ "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS },
}; };
_shell_debug = g_parse_debug_string (debug_env, keys, _shell_debug = g_parse_debug_string (debug_env, keys,
@@ -328,6 +332,59 @@ shut_up (const char *domain,
{ {
} }
static void
dump_gjs_stack_alarm_sigaction (int signo)
{
g_log_set_default_handler (g_log_default_handler, NULL);
g_warning ("Failed to dump Javascript stack, got stuck");
g_log_set_default_handler (default_log_handler, NULL);
raise (caught_signal);
}
static void
dump_gjs_stack_on_signal_handler (int signo)
{
struct sigaction sa = { 0 };
gsize i;
/* Ignore all the signals starting this point, a part the one we'll raise
* (which is implicitly ignored here through SA_RESETHAND), this is needed
* not to get this handler being called by other signals that we were
* tracking and that might be emitted by code called starting from now.
*/
for (i = 0; i < G_N_ELEMENTS (_tracked_signals); ++i)
{
if (_tracked_signals[i] && i != signo)
signal (i, SIG_IGN);
}
/* Waiting at least 5 seconds for the dumpstack, if it fails, we raise the error */
caught_signal = signo;
sa.sa_handler = dump_gjs_stack_alarm_sigaction;
sigemptyset (&sa.sa_mask);
sigaction (SIGALRM, &sa, NULL);
alarm (5);
gjs_dumpstack ();
alarm (0);
raise (signo);
}
static void
dump_gjs_stack_on_signal (int signo)
{
struct sigaction sa = { 0 };
sa.sa_flags = SA_RESETHAND | SA_NODEFER;
sa.sa_handler = dump_gjs_stack_on_signal_handler;
sigemptyset (&sa.sa_mask);
sigaction (signo, &sa, NULL);
_tracked_signals[signo] = TRUE;
}
static gboolean static gboolean
list_modes (const char *option_name, list_modes (const char *option_name,
const char *value, const char *value,
@@ -459,6 +516,17 @@ main (int argc, char **argv)
shell_prefs_init (); shell_prefs_init ();
dump_gjs_stack_on_signal (SIGABRT);
dump_gjs_stack_on_signal (SIGFPE);
dump_gjs_stack_on_signal (SIGIOT);
dump_gjs_stack_on_signal (SIGTRAP);
if ((_shell_debug & SHELL_DEBUG_BACKTRACE_SEGFAULTS))
{
dump_gjs_stack_on_signal (SIGBUS);
dump_gjs_stack_on_signal (SIGSEGV);
}
ecode = meta_run (); ecode = meta_run ();
g_debug ("Doing final cleanup"); g_debug ("Doing final cleanup");

View File

@@ -37,7 +37,6 @@ gnome_shell_cflags = [
'-DGNOME_SHELL_PKGLIBDIR="@0@"'.format(pkglibdir) '-DGNOME_SHELL_PKGLIBDIR="@0@"'.format(pkglibdir)
] ]
rpath_link_args = ['-Wl,-rpath', mutter_typelibdir]
install_rpath = ':'.join([mutter_typelibdir, pkglibdir]) install_rpath = ':'.join([mutter_typelibdir, pkglibdir])
gnome_shell_deps = [ gnome_shell_deps = [
@@ -81,7 +80,7 @@ libshell_menu = library('gnome-shell-menu',
sources: libshell_menu_gir_sources + libshell_menu_no_gir_sources, sources: libshell_menu_gir_sources + libshell_menu_no_gir_sources,
dependencies: [gio_dep, clutter_dep], dependencies: [gio_dep, clutter_dep],
include_directories: conf_inc, include_directories: conf_inc,
link_args: rpath_link_args, build_rpath: mutter_typelibdir,
install_rpath: mutter_typelibdir, install_rpath: mutter_typelibdir,
install_dir: pkglibdir, install_dir: pkglibdir,
install: true install: true
@@ -183,10 +182,8 @@ if enable_recorder
endif endif
libshell_enums = gnome.mkenums('shell-enum-types', libshell_enums = gnome.mkenums_simple('shell-enum-types',
sources: libshell_public_headers, sources: libshell_public_headers
c_template: 'shell-enum-types.c.in',
h_template: 'shell-enum-types.h.in'
) )
libshell_gir_sources = [ libshell_gir_sources = [
@@ -214,7 +211,7 @@ libshell = library('gnome-shell',
include_directories: [conf_inc, st_inc, include_directories('tray')], include_directories: [conf_inc, st_inc, include_directories('tray')],
c_args: gnome_shell_cflags, c_args: gnome_shell_cflags,
link_with: [libtray], link_with: [libtray],
link_args: rpath_link_args, build_rpath: mutter_typelibdir,
install_rpath: install_rpath, install_rpath: install_rpath,
install_dir: pkglibdir, install_dir: pkglibdir,
install: true install: true
@@ -256,7 +253,7 @@ executable('gnome-shell', 'main.c',
], ],
dependencies: gnome_shell_deps + [libshell_dep, libst_dep, mutter_dep], dependencies: gnome_shell_deps + [libshell_dep, libst_dep, mutter_dep],
include_directories: [conf_inc, st_inc, include_directories('tray')], include_directories: [conf_inc, st_inc, include_directories('tray')],
link_args: rpath_link_args, build_rpath: mutter_typelibdir,
install_rpath: install_rpath, install_rpath: install_rpath,
install: true install: true
) )
@@ -266,7 +263,7 @@ executable('gnome-shell-extension-prefs',
c_args: gnome_shell_cflags, c_args: gnome_shell_cflags,
dependencies: gnome_shell_deps, dependencies: gnome_shell_deps,
include_directories: [conf_inc], include_directories: [conf_inc],
link_args: rpath_link_args, build_rpath: mutter_typelibdir,
install_rpath: install_rpath, install_rpath: install_rpath,
install: true install: true
) )
@@ -278,7 +275,7 @@ if have_networkmanager
c_args: gnome_shell_cflags, c_args: gnome_shell_cflags,
dependencies: gnome_shell_deps, dependencies: gnome_shell_deps,
include_directories: [conf_inc], include_directories: [conf_inc],
link_args: rpath_link_args, build_rpath: mutter_typelibdir,
install_rpath: install_rpath, install_rpath: install_rpath,
install_dir: libexecdir, install_dir: libexecdir,
install: true install: true
@@ -288,7 +285,7 @@ endif
executable('gnome-shell-perf-helper', 'shell-perf-helper.c', executable('gnome-shell-perf-helper', 'shell-perf-helper.c',
dependencies: [gtk_dep, gio_dep, m_dep], dependencies: [gtk_dep, gio_dep, m_dep],
include_directories: [conf_inc], include_directories: [conf_inc],
link_args: rpath_link_args, build_rpath: mutter_typelibdir,
install_rpath: install_rpath, install_rpath: install_rpath,
install_dir: libexecdir, install_dir: libexecdir,
install: true install: true
@@ -298,5 +295,5 @@ executable('run-js-test', 'run-js-test.c',
dependencies: [mutter_dep, gio_dep, gjs_dep], dependencies: [mutter_dep, gio_dep, gjs_dep],
include_directories: [conf_inc], include_directories: [conf_inc],
link_with: libshell, link_with: libshell,
link_args: rpath_link_args build_rpath: mutter_typelibdir,
) )

View File

@@ -1067,16 +1067,10 @@ _shell_app_remove_window (ShellApp *app,
if (!meta_window_is_skip_taskbar (window)) if (!meta_window_is_skip_taskbar (window))
app->running_state->interesting_windows--; app->running_state->interesting_windows--;
shell_app_sync_running_state (app);
if (app->running_state->windows == NULL) if (app->running_state->windows == NULL)
{
g_clear_pointer (&app->running_state, unref_running_state); g_clear_pointer (&app->running_state, unref_running_state);
shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
}
else
{
shell_app_sync_running_state (app);
}
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0); g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
} }
@@ -1196,6 +1190,14 @@ app_child_setup (gpointer user_data)
} }
#endif #endif
static void
wait_pid (GDesktopAppInfo *appinfo,
GPid pid,
gpointer user_data)
{
g_child_watch_add (pid, (GChildWatchFunc) g_spawn_close_pid, NULL);
}
/** /**
* shell_app_launch: * shell_app_launch:
* @timestamp: Event timestamp, or 0 for current event timestamp * @timestamp: Event timestamp, or 0 for current event timestamp
@@ -1234,13 +1236,13 @@ shell_app_launch (ShellApp *app,
ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL, ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL,
context, context,
G_SPAWN_SEARCH_PATH, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
#ifdef HAVE_SYSTEMD #ifdef HAVE_SYSTEMD
app_child_setup, (gpointer)shell_app_get_id (app), app_child_setup, (gpointer)shell_app_get_id (app),
#else #else
NULL, NULL, NULL, NULL,
#endif #endif
NULL, NULL, wait_pid, NULL,
error); error);
g_object_unref (context); g_object_unref (context);

View File

@@ -1,30 +0,0 @@
/*** BEGIN file-header ***/
#include "shell-enum-types.h"
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
#include "@filename@"
/*** END file-production ***/
/*** BEGIN value-header ***/
GType
@enum_name@_get_type(void) {
static GType enum_type_id = 0;
if (G_UNLIKELY (!enum_type_id))
{
static const G@Type@Value values[] = {
/*** END value-header ***/
/*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/
/*** BEGIN value-tail ***/
{ 0, NULL, NULL }
};
enum_type_id = g_@type@_register_static("@EnumName@", values);
}
return enum_type_id;
}
/*** END value-tail ***/

View File

@@ -1,25 +0,0 @@
/*** BEGIN file-header ***/
#ifndef __SHELL_ENUM_TYPES_H__
#define __SHELL_ENUM_TYPES_H__
#include <glib-object.h>
G_BEGIN_DECLS
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN file-tail ***/
G_END_DECLS
#endif /* !__SHELL_ENUM_TYPES_H__ */
/*** END file-tail ***/
/*** BEGIN value-header ***/
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define SHELL_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
/*** END value-header ***/

View File

@@ -124,6 +124,7 @@ shell_gtk_embed_on_window_mapped (GtkWidget *object,
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed); ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
MetaDisplay *display = shell_global_get_display (shell_global_get ()); MetaDisplay *display = shell_global_get_display (shell_global_get ());
if (priv->window_created_handler == 0 && priv->window_actor == NULL)
/* Listen for new windows so we can detect when Mutter has /* Listen for new windows so we can detect when Mutter has
created a MutterWindow for this window */ created a MutterWindow for this window */
priv->window_created_handler = priv->window_created_handler =

View File

@@ -82,10 +82,12 @@ st_sources = [
'st-widget.c' 'st-widget.c'
] ]
st_enums = gnome.mkenums('st-enum-types', st_enums = gnome.mkenums_simple('st-enum-types',
sources: st_headers, sources: st_headers,
c_template: 'st-enum-types.c.in', header_prefix: '''
h_template: 'st-enum-types.h.in' #if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION)
#error "Only <st/st.h> can be included directly.h"
#endif'''
) )
st_gir_sources = st_sources + st_private_headers + st_headers + st_enums st_gir_sources = st_sources + st_private_headers + st_headers + st_enums

View File

@@ -1106,7 +1106,7 @@ st_entry_get_text (StEntry *entry)
g_return_val_if_fail (ST_IS_ENTRY (entry), NULL); g_return_val_if_fail (ST_IS_ENTRY (entry), NULL);
priv = st_entry_get_instance_private (entry); priv = st_entry_get_instance_private (entry);
if (clutter_actor_is_visible (priv->hint_actor)) if (priv->hint_actor != NULL && clutter_actor_is_visible (priv->hint_actor))
return ""; return "";
else else
return clutter_text_get_text (CLUTTER_TEXT (priv->entry)); return clutter_text_get_text (CLUTTER_TEXT (priv->entry));

View File

@@ -1,33 +0,0 @@
/*** BEGIN file-header ***/
#ifndef ST_COMPILATION
#define ST_COMPILATION
#endif
#include "st-enum-types.h"
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
#include "@filename@"
/*** END file-production ***/
/*** BEGIN value-header ***/
GType
@enum_name@_get_type(void) {
static GType enum_type_id = 0;
if (G_UNLIKELY (!enum_type_id))
{
static const G@Type@Value values[] = {
/*** END value-header ***/
/*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/
/*** BEGIN value-tail ***/
{ 0, NULL, NULL }
};
enum_type_id = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
}
return enum_type_id;
}
/*** END value-tail ***/

View File

@@ -1,29 +0,0 @@
/*** BEGIN file-header ***/
#if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION)
#error "Only <st/st.h> can be included directly.h"
#endif
#ifndef __ST_ENUM_TYPES_H__
#define __ST_ENUM_TYPES_H__
#include <glib-object.h>
G_BEGIN_DECLS
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN file-tail ***/
G_END_DECLS
#endif /* !__ST_ENUM_TYPES_H__ */
/*** END file-tail ***/
/*** BEGIN value-header ***/
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define ST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
/*** END value-header ***/

View File

@@ -275,14 +275,7 @@ st_icon_update_shadow_pipeline (StIcon *icon)
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref); g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
if (priv->shadow_spec) if (priv->shadow_spec)
{
gint width, height;
clutter_texture_get_base_size (CLUTTER_TEXTURE (priv->icon_texture),
&width, &height);
priv->shadow_pipeline = _st_create_shadow_pipeline_from_actor (priv->shadow_spec, priv->icon_texture); priv->shadow_pipeline = _st_create_shadow_pipeline_from_actor (priv->shadow_spec, priv->icon_texture);
}
} }
static void static void

View File

@@ -414,24 +414,8 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
ClutterActor *actor) ClutterActor *actor)
{ {
CoglPipeline *shadow_pipeline = NULL; CoglPipeline *shadow_pipeline = NULL;
if (CLUTTER_IS_TEXTURE (actor))
{
CoglTexture *texture;
texture = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (actor));
if (texture)
shadow_pipeline = _st_create_shadow_pipeline (shadow_spec, texture);
}
else
{
CoglTexture *buffer;
CoglOffscreen *offscreen;
CoglFramebuffer *fb;
ClutterActorBox box; ClutterActorBox box;
CoglColor clear_color;
float width, height; float width, height;
CoglError *catch_error = NULL;
clutter_actor_get_allocation_box (actor, &box); clutter_actor_get_allocation_box (actor, &box);
clutter_actor_box_get_size (&box, &width, &height); clutter_actor_box_get_size (&box, &width, &height);
@@ -439,6 +423,25 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
if (width == 0 || height == 0) if (width == 0 || height == 0)
return NULL; return NULL;
if (CLUTTER_IS_TEXTURE (actor))
{
CoglTexture *texture;
texture = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (actor));
if (texture &&
cogl_texture_get_width (texture) == width &&
cogl_texture_get_height (texture) == height)
shadow_pipeline = _st_create_shadow_pipeline (shadow_spec, texture);
}
if (shadow_pipeline == NULL)
{
CoglTexture *buffer;
CoglOffscreen *offscreen;
CoglFramebuffer *fb;
CoglColor clear_color;
CoglError *catch_error = NULL;
buffer = cogl_texture_new_with_size (width, buffer = cogl_texture_new_with_size (width,
height, height,
COGL_TEXTURE_NO_SLICING, COGL_TEXTURE_NO_SLICING,

View File

@@ -1,8 +1,18 @@
testconf = configuration_data() testconf = configuration_data()
testconf.set('MUTTER_TYPELIB_DIR', mutter_typelibdir) testconf.set('MUTTER_TYPELIB_DIR', mutter_typelibdir)
testconf.set('srcdir', meson.current_source_dir()) testconf.set('srcdir', meson.current_source_dir())
configure_file( run_test = configure_file(
input: 'run-test.sh.in', input: 'run-test.sh.in',
output: 'run-test.sh', output: 'run-test.sh',
configuration: testconf configuration: testconf
) )
testenv = environment()
testenv.set('GSETTINGS_SCHEMA_DIR', join_paths(meson.build_root(), 'data'))
foreach test : ['insertSorted', 'jsParse', 'markup', 'url']
test(test, run_test,
args: 'unit/@0@.js'.format(test),
env: testenv,
workdir: meson.current_source_dir())
endforeach

View File

@@ -176,7 +176,7 @@ for (let i = 0; i < testsModifyScope.length; i++) {
let matches = text.match(/(.*)\.(.*)/); let matches = text.match(/(.*)\.(.*)/);
if (matches) { if (matches) {
[expr, base, attrHead] = matches; let [expr, base, attrHead] = matches;
if (!JsParse.isUnsafeExpression(base)) { if (!JsParse.isUnsafeExpression(base)) {
with (obj) { with (obj) {

View File

@@ -1,26 +0,0 @@
#!/usr/bin/python3
#
# This is a simple script that we use to check for files in git
# and not in the distribution. It was previously written in shell
# and inlined in the Makefile.am, but 'git ls-files --exclude=<pattern>'
# was changed to no longer do anything useful, which made that
# too challenging to be worthwhile.
import fnmatch, os, subprocess, sys
srcdir=sys.argv[1]
distdir=sys.argv[2]
excludes=sys.argv[3:]
cwd=os.getcwd()
os.chdir(srcdir)
status=0
for f in subprocess.Popen(["git", "ls-files"], stdout=subprocess.PIPE).stdout:
f = f.decode('utf-8').strip()
if (not os.path.exists(os.path.join(cwd, distdir, f)) and
not any((fnmatch.fnmatch(f, p) for p in excludes))):
print("File missing from distribution:", f)
status=1
sys.exit(status)