Compare commits

..

21 Commits

Author SHA1 Message Date
3dff544396 Bump version to 3.14.3
Update NEWS.
2014-12-19 12:07:06 +01:00
7e7eab2bea gestures: Restrict actions based on keybindingMode
Just like keybindings and the message tray pointer barrier, gestures
don't always make sense - for instance, swiping up the screen shield
should not trigger the message tray just as the SelectArea action around
the left edge should not open the overview.
To avoid this, restrict gestures based on the current keybinding mode.

https://bugzilla.gnome.org/show_bug.cgi?id=740237
2014-12-19 11:48:27 +01:00
c568b44997 Calendar: ignore timeouts starting the calendar-server
In certain cases the timeout for starting the calendar helper can
be reached but the calendar helper still loads fine. If so, just
ignore the timeout and wait until we get a notification from
dbus of the successful start.

https://bugzilla.gnome.org/show_bug.cgi?id=735308
2014-12-14 17:19:12 -08:00
ce818c0ae5 calendar-server: activate evolution-source-registry manually at startup
g_dbus_proxy_new() (and library calls that wrap it) has an hardcoded
timeout of 25 seconds, which is insufficient for starting up e-s-r
in certain setups. Avoid a timeout error by starting the service
manually with a longer timeout before hand.
Also demote the error to a warning + exit failure instead of
a crash, to avoid triggering abrt reports.

https://bugzilla.gnome.org/show_bug.cgi?id=735308
2014-12-14 17:19:12 -08:00
ef2e301c08 Add ScrollView to calendar events
Added single ScrollView to make the calendar events scrollable

The calendar height will not go beyond the screen height
Calendar events for all periods will be enclosed in a single ScrollView

Moved the separator to top of the buttons while expanding

https://bugzilla.gnome.org/show_bug.cgi?id=705115
2014-12-11 18:48:22 +01:00
ba274f42b2 build: Workaround quoting issues in configure script
Default value of BROWSER_PLUGIN_DIR variable contains special symbols.
Thus quoting and inlining it in parameter expansion is not portable.
In particular it does not work in dash. Replace ${a:-b} parameter
expansion with conditional statement.

https://bugzilla.gnome.org/show_bug.cgi?id=739241
2014-11-29 16:37:54 +00:00
2ceaa05a5a gdm: fix sensitivity of auth prompt when cancelling early and user list is disabled
If the user list is disabled and the user clicks cancel quickly enough
after typing their username, they can get in a state where the
auth prompt gets stuck in the insensitive state.

This is because the login dialog code makes the prompt insensitive
while while pam is processing the provided username, but the prompt
only makes itself sensitive again when it is hidden.

This commit makes it sensitive right before asking for a username again.

https://bugzilla.gnome.org/show_bug.cgi?id=740141
2014-11-26 19:04:43 -06:00
047e454a7c gdm: disallow cancel after verification succeeds
Once verification has succeeded, the train's already
left the building and we shouldn't allow canceling.

This commit renders the cancel button non-reactive
and makes the cancel function be a noop after
verification succeeds.

https://bugzilla.gnome.org/show_bug.cgi?id=740141
2014-11-26 19:04:29 -06:00
86618ce1f9 network: properly remove connections from list
Due to a typo we were always removing the first (index 0) connection
from the global list of connections instead of the correct one.

This resulted in some connections remaining in the shell's connection
list long after they were removed.  In particular, this resulted in
multiple copies of a bluetooth connection appearing after suspend/resume
(when the device was readded and the cached connection list was
rescanned).

https://bugzilla.gnome.org/show_bug.cgi?id=740227
2014-11-26 16:08:17 -05:00
59724c5dd5 Bump version to 3.14.2
Update NEWS.
2014-11-12 19:30:14 +01:00
3bb500fed4 viewSelector: Hide workspace page after animating to app picker
WorkspacesDisplay relies on being hidden to disable workspace switches
by scrolling or panning. Usually viewSelector will hide the previous
page on page switch, but we currently miss the case when opening the
overview at the app picker, where the workspaces page is still shown
for the transition, but never hidden.
Fix this by calling hide() in addition to setting the opacity to 0 at
the end of the overview animation.

https://bugzilla.gnome.org/show_bug.cgi?id=737534
2014-11-12 19:19:31 +01:00
dcd3945bb7 Move style updates in AppIcon._onStateChanged out
There is currently no simple way to inject into AppIcon's state change,
so an extension that wants to do this has to destroy/remove/update all
icons in the Shell (i.e. in the Dash, AllView, FrequentView) on enable()
and disable() after updating AppIcon.prototype._onStateChange, or the
extension must require a restart of the Shell.

To solve this issue, we rename _onStateChanged to _updateRunningStyle,
and connect the notify::state signal with an anonymous function that
calls _updateRunningStyle.
This extra function call should allow extensions to just extend the
updateRunningStyle function in the prototype.

https://bugzilla.gnome.org/show_bug.cgi?id=739497
2014-11-06 21:31:47 +01:00
f414f616c4 dateMenu: Fix typo in _isToday()
getDay() is the day of week, what we want there is getDate().

https://bugzilla.gnome.org/show_bug.cgi?id=738725
2014-11-03 15:05:59 +01:00
e21e90c5e6 networkAgent: Support NM versions without :capabilities
Commit 926de53c0c bumped the requirement for NetworkManager,
which is problematic on a stable branch; optionally fall back to
the previous code.

https://bugzilla.gnome.org/show_bug.cgi?id=738485
2014-10-31 12:41:23 +00:00
1e7b2ef51f Bump version to 3.14.1.5
Update NEWS
2014-10-30 11:22:27 +00:00
c291de7479 Calendar: Inline _ellipsizeEventTime into caller
This patch inlines the function _ellipsizeEventTime into its only caller
_addEvent. This also removes the need for the global const
EventEllipses and is thus removed by this commit as well.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 19:33:25 -05:00
aee1a18270 Calendar: sort multi-day events by ending day/time
With commit dc6a60dde, the calendar displays the ending day and time of
a continuing multi-day event on its ending day. This results in the list
not appearing to be sorted. This patch sorts the list according to the
displayed day/time.

With the two appointments
Thursday 0800-1000 Foo, and Wednesday 0900-Friday 1200 Bar and today
being Monday, the rest of the week list currently displays:
F ...1200 Bar
T    0800 Foo
With this patch, the displaying order is switched because Friday comes
after Thursday.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 19:33:25 -05:00
6c67f26e7d Calendar: Show multi-day event continuation
Currently, multi-day events are shown as individual appointments on each
day.  This patch ellipsizes multi-day events to indicate continuation on
the prior or following day (or other time-period.)

The time label spot is now replaced by a box layout that contains the
prefix ellipsis label, the time label and the postfix ellipsis label.
In order to keep the alignment, ellipses are merely invisible (zero
opacity) when hidden.

The ellipses are styled using the events-day-time-ellipses class which,
by default, take the color of the event text.

When RTL is used, the box contents are adjusted accordingly (clutter
does that for us).

An event spanning three days now displays "...All Day..." in the
calendar on the second day.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 19:33:25 -05:00
deb651acbf BackgroundCache: plug an Animation object leak
We need to return early in case the animation file is the same,
otherwise we'll create a new Animation object and leak the previous
one.

https://bugzilla.gnome.org/show_bug.cgi?id=739252
2014-10-27 18:28:39 +01:00
d2011f6d7f messageTray: Summarize notifications when messages queue up
It is really annoying for the user to acknowledge multiple notifications
when they queue up. So, to prevent a notification flood that has to be
handled by the user one-by-one, a summarized-notification feature is
added which leaves a single summarized-notification for the user,
replacing multiple notifications if the number exceeds 1, which they may
or may not acknowledge. When this summarized-notification is acknowledged,
the message-tray is opened where they can view the notifications that were
summarized. This helps the user concentrate on his primary task
simultaneously informing them about the new notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=702460
2014-10-27 18:22:36 +01:00
416adec904 Fix handling of SystemBackground
Since the background rework, SystemBackground is no longer a transparent
actor that you have to stack on top of a solid background, it is an
opaque actor. Fix the color of the background actor, and remove places
where we were setting the background color underneath the system background
and expecting blending - in particular, we can always set no_clear_hint
on the stage.

https://bugzilla.gnome.org/show_bug.cgi?id=738652
2014-10-16 17:17:33 -04:00
77 changed files with 2859 additions and 5383 deletions

1
.gitignore vendored
View File

@ -23,7 +23,6 @@ data/gnome-shell-wayland.desktop
data/gnome-shell-wayland.desktop.in
data/gnome-shell-extension-prefs.desktop
data/gnome-shell-extension-prefs.desktop.in
data/gnome-shell-theme.gresource
data/gschemas.compiled
data/perf-background.xml
data/org.gnome.shell.gschema.xml

61
NEWS
View File

@ -1,50 +1,35 @@
3.15.2
3.14.3
======
* Fix visual glitch of window preview outline in overview [Chris; #699044]
* Change user facing name of "Captive Portal" to "Network Login" [Elad; #737198]
* Port to Python 3 [Slavek; #732478]
* Hide Airplane mode indicator when g-s-d says so [Cosimo; #736292]
* Allow translators to change non-work days [Lavi; #664645]
* Delay invocation of caribou daemon until really needed [Daiki; #739712]
* Don't lock screen after crash if locking is disabled [Adel; #704884]
* Improve layout of extension installation dialog [William; #739888]
* Fix workspace changes from app picker [Yuki; #737534]
* Preload all ibus input sources in user configuration [Takao; #695428]
* Properly remove network connections from list [Ryan; #740227]
* Support CSS margin property [Carlos; #728437]
* Improve handling of BUSY application state [Phillip; #736492]
* Fix erroneous week numbers in calendar [Florian; #736722]
* Misc. bugfixes and cleanups [Darcy, Yuki, Alexander, Eskild, Bastien, Cosimo, Colin,
Ray; #738725, #739497, #739241, #672500, #739822, #740074, #704163, #740141]
* Fix handling of cancel button on login screen [Ray; #740141]
* Fix build when using dash as default shell [Alexander; #739241]
* Make event list in calendar scrollable [Stalin; #705115]
* Fix calendar-server crash on DBus timeout [Giovanni; #735308]
* Fix gestures triggering erroneously [Florian; #740237]
Contributors:
Yuki, Lavi .A, Elad Alfassa, Cosimo Cecchi, Takao Fujiwara, Adel Gadllah,
Eskild Hustvedt, Chris Johns, William Jon McCann, Slavek Kabrda, Ryan Lortie,
Florian Müllner, Bastien Nocera, Christian Persch, Carlos Soriano,
Jasper St. Pierre, Ray Strode, Alexander Tsoy, Daiki Ueno, Colin Walters,
Phillip Wood
Giovanni Campagna, Ryan Lortie, Florian Müllner, Stalin Pereira, Ray Strode,
Alexander Tsoy
Translations:
Jorge Perez Perez [an], Daniel Martinez [an], Daniel Mustieles [es],
Trần Ngọc Quân [vi], Changwoo Ryu [ko], Kjartan Maraas [nb],
Yosef Or Boczko [he], Marek Černocký [cs]
3.15.1
3.14.2
======
* Use GResources for theme loading [Cosimo; #736936]
* Reset the OSK to primary on monitor changes [Rui; #738536]
* Use LC_TIME locale for format string translations [Florian; #738640]
* Summarize queued up notifications [Devyani; #702460]
* Improve handling of multi-day events [Andreas; #727302]
* Support EXTERNAL scroll policy type [Florian; #739379]
* Misc. bugfixes [Owen, Rui; #738652, #739252]
* Do not hard-depend on latest NetworkManager [Florian; #738485]
* Fix check for isToday in calendar [Darcy; #738725]
* Fix workspace changes from app picker [Yuki; #737534]
* Misc. bug fixes [Yuki; #739497]
Contributors:
Andreas Brauchli, Cosimo Cecchi, Devyani Kota, Rui Matos, Florian Müllner,
Jasper St. Pierre, Owen W. Taylor
Darcy, Florian Müllner, Yuki
Translations:
Bahodir Mansurov [uz@cyrillic]
3.14.1.5
========
* Fix handing of SystemBackground [Owen; #738652]
* Summarize queued up notifications [Devyani; #702460]
* Plug an animation object leak [Rui; #739252]
* Improve handling of multi-day events [Andreas; #727302]
Contributors:
Andreas Brauchli, Devyani Kota, Rui Matos, Owen W. Taylor
3.14.1
======

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.15.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.14.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -37,7 +37,7 @@ AC_PATH_PROG([XSLTPROC], [xsltproc])
GLIB_GSETTINGS
# Get a value to substitute into gnome-shell.in
AM_PATH_PYTHON([3])
AM_PATH_PYTHON([2.5])
AC_SUBST(PYTHON)
# We need at least this, since gst_plugin_register_static() was added
@ -76,8 +76,8 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.15.2
GTK_MIN_VERSION=3.15.0
MUTTER_MIN_VERSION=3.14.3
GTK_MIN_VERSION=3.13.2
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.5.3
@ -237,12 +237,6 @@ if test -z "${BROWSER_PLUGIN_DIR}"; then
fi
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme])
AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[])
if test -z "$GDBUS_CODEGEN"; then
AC_MSG_ERROR([gdbus-codegen not found])
fi
AC_CONFIG_FILES([
Makefile
data/Makefile

View File

@ -35,11 +35,44 @@ introspection_DATA = \
org.gnome.ShellSearchProvider.xml \
org.gnome.ShellSearchProvider2.xml
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml)
gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $<
resourcedir = $(pkgdatadir)
resource_DATA = gnome-shell-theme.gresource
themedir = $(pkgdatadir)/theme
dist_theme_DATA = \
theme/calendar-arrow-left.svg \
theme/calendar-arrow-right.svg \
theme/calendar-today.svg \
theme/checkbox-focused.svg \
theme/checkbox-off-focused.svg \
theme/checkbox-off.svg \
theme/checkbox.svg \
theme/close-window.svg \
theme/close.svg \
theme/corner-ripple-ltr.png \
theme/corner-ripple-rtl.png \
theme/dash-placeholder.svg \
theme/filter-selected-ltr.svg \
theme/filter-selected-rtl.svg \
theme/gnome-shell.css \
theme/logged-in-indicator.svg \
theme/message-tray-background.png \
theme/more-results.svg \
theme/noise-texture.png \
theme/page-indicator-active.svg \
theme/page-indicator-inactive.svg \
theme/page-indicator-checked.svg \
theme/page-indicator-hover.svg \
theme/panel-button-border.svg \
theme/panel-button-highlight-narrow.svg \
theme/panel-button-highlight-wide.svg \
theme/process-working.svg \
theme/running-indicator.svg \
theme/source-button-border.svg \
theme/summary-counter.svg \
theme/toggle-off-us.svg \
theme/toggle-off-intl.svg \
theme/toggle-on-us.svg \
theme/toggle-on-intl.svg \
theme/ws-switch-arrow-up.png \
theme/ws-switch-arrow-down.png
backgrounddir = $(pkgdatadir)
background_DATA = perf-background.xml
@ -83,9 +116,7 @@ EXTRA_DIST = \
perf-background.xml.in \
org.gnome.Shell.PortalHelper.desktop.in \
org.gnome.Shell.PortalHelper.service.in \
org.gnome.shell.gschema.xml.in.in \
gnome-shell-theme.gresource.xml \
$(resource_files)
org.gnome.shell.gschema.xml.in.in
CLEANFILES += \
gnome-shell.desktop.in \
@ -97,5 +128,4 @@ CLEANFILES += \
perf-background.xml \
gschemas.compiled \
org.gnome.shell.gschema.valid \
org.gnome.shell.gschema.xml.in \
gnome-shell-theme.gresource
org.gnome.shell.gschema.xml.in

View File

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell/theme">
<file>calendar-arrow-left.svg</file>
<file>calendar-arrow-right.svg</file>
<file>calendar-today.svg</file>
<file>checkbox-focused.svg</file>
<file>checkbox-off-focused.svg</file>
<file>checkbox-off.svg</file>
<file>checkbox.svg</file>
<file>close-window.svg</file>
<file>close.svg</file>
<file>corner-ripple-ltr.png</file>
<file>corner-ripple-rtl.png</file>
<file>dash-placeholder.svg</file>
<file>filter-selected-ltr.svg</file>
<file>filter-selected-rtl.svg</file>
<file>gnome-shell.css</file>
<file>logged-in-indicator.svg</file>
<file>message-tray-background.png</file>
<file>more-results.svg</file>
<file>noise-texture.png</file>
<file>page-indicator-active.svg</file>
<file>page-indicator-inactive.svg</file>
<file>page-indicator-checked.svg</file>
<file>page-indicator-hover.svg</file>
<file>panel-button-border.svg</file>
<file>panel-button-highlight-narrow.svg</file>
<file>panel-button-highlight-wide.svg</file>
<file>process-working.svg</file>
<file>running-indicator.svg</file>
<file>source-button-border.svg</file>
<file>summary-counter.svg</file>
<file>toggle-off-us.svg</file>
<file>toggle-off-intl.svg</file>
<file>toggle-on-us.svg</file>
<file>toggle-on-intl.svg</file>
<file>ws-switch-arrow-up.png</file>
<file>ws-switch-arrow-down.png</file>
</gresource>
</gresources>

View File

@ -1,9 +1,9 @@
[Desktop Entry]
_Name=Network Login
_Name=Captive Portal
Type=Application
Exec=gapplication launch org.gnome.Shell.PortalHelper
DBusActivatable=true
NoDisplay=true
Icon=network-workgroup
StartupNotify=true
OnlyShowIn=GNOME;
OnlyShowIn=GNOME;

View File

@ -829,7 +829,6 @@ StScrollBar StButton#vhandle:active {
.window-clone-border {
border: 4px solid rgba(255, 255, 255, 0.5);
border-radius: 4px;
box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.5);
}
.notification-close {

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Signals = imports.signals;
const St = imports.gi.St;
@ -127,7 +126,7 @@ const AuthPrompt = new Lang.Class({
this._initButtons();
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._spinner = new Animation.AnimatedIcon(spinnerIcon, DEFAULT_BUTTON_WELL_ICON_SIZE);
this._spinner.actor.opacity = 0;
this._spinner.actor.show();

View File

@ -537,24 +537,24 @@ const LoginDialog = new Lang.Class({
}
},
_updateLogoTexture: function(cache, file) {
if (this._logoFile && !this._logoFile.equal(file))
_updateLogoTexture: function(cache, uri) {
if (this._logoFileUri != uri)
return;
this._logoBin.destroy_all_children();
if (this._logoFile) {
if (this._logoFileUri) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile,
-1, _LOGO_ICON_HEIGHT,
scaleFactor));
this._logoBin.add_child(this._textureCache.load_uri_async(this._logoFileUri,
-1, _LOGO_ICON_HEIGHT,
scaleFactor));
}
},
_updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
this._logoFile = path ? Gio.file_new_for_path(path) : null;
this._updateLogoTexture(this._textureCache, this._logoFile);
this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null;
this._updateLogoTexture(this._textureCache, this._logoFileUri);
},
_onPrompted: function() {

View File

@ -1,14 +1,13 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
try {
var IBus = imports.gi.IBus;
_checkIBusVersion();
if (!('new_async' in IBus.Bus))
throw "IBus version is too old";
const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
} catch (e) {
var IBus = null;
@ -17,22 +16,6 @@ try {
let _ibusManager = null;
function _checkIBusVersion() {
var requiredMajor = 1;
var requiredMinor = 5;
var requiredMicro = 2;
if ((IBus.MAJOR_VERSION > requiredMajor) ||
(IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION > requiredMinor) ||
(IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION == requiredMinor &&
IBus.MICRO_VERSION >= requiredMicro))
return;
throw "Found IBus version %d.%d.%d but required is %d.%d.%d".
format(IBus.MAJOR_VERSION, IBus.MINOR_VERSION, IBus.MINOR_VERSION,
requiredMajor, requiredMinor, requiredMicro);
}
function getIBusManager() {
if (_ibusManager == null)
_ibusManager = new IBusManager();
@ -45,7 +28,6 @@ const IBusManager = new Lang.Class({
// This is the longest we'll keep the keyboard frozen until an input
// source is active.
_MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms
_PRELOAD_ENGINES_DELAY_TIME: 30, // sec
_init: function() {
if (!IBus)
@ -60,7 +42,6 @@ const IBusManager = new Lang.Class({
this._ready = false;
this._registerPropertiesId = 0;
this._currentEngineName = null;
this._preloadEnginesId = 0;
this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', Lang.bind(this, this._onConnected));
@ -195,27 +176,5 @@ const IBusManager = new Lang.Class({
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
null, callback);
},
preloadEngines: function(ids) {
if (!IBus || !this._ibus || ids.length == 0)
return;
if (this._preloadEnginesId != 0) {
Mainloop.source_remove(this._preloadEnginesId);
this._preloadEnginesId = 0;
}
this._preloadEnginesId =
Mainloop.timeout_add_seconds(this._PRELOAD_ENGINES_DELAY_TIME,
Lang.bind(this, function() {
this._ibus.preload_engines_async(
ids,
-1,
null,
null);
this._preloadEnginesId = 0;
return GLib.SOURCE_REMOVE;
}));
},
});
Signals.addSignalMethods(IBusManager.prototype);

View File

@ -35,7 +35,7 @@ function releaseKeyboard() {
}
function holdKeyboard() {
global.display.freeze_keyboard(global.get_current_time());
global.freeze_keyboard(global.get_current_time());
}
const KeyboardManager = new Lang.Class({

View File

@ -81,6 +81,7 @@ const AppSwitcherPopup = new Lang.Class({
let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT);
let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT);
let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM);
let vPadding = this.actor.get_theme_node().get_vertical_padding();
let hPadding = leftPadding + rightPadding;
let icon = this._items[this._selectedIndex].actor;

View File

@ -12,7 +12,7 @@ const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({
Name: 'Animation',
_init: function(file, width, height, speed) {
_init: function(filename, width, height, speed) {
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._speed = speed;
@ -23,7 +23,7 @@ const Animation = new Lang.Class({
this._frame = 0;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._animations = St.TextureCache.get_default().load_sliced_image (file, width, height, scaleFactor,
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height, scaleFactor,
Lang.bind(this, this._animationsLoaded));
this.actor.set_child(this._animations);
},
@ -82,7 +82,7 @@ const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon',
Extends: Animation,
_init: function(file, size) {
this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
_init: function(filename, size) {
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
}
});

View File

@ -379,7 +379,9 @@ const AllView = new Lang.Class({
this.actor.add_actor(this._scrollView);
this._scrollView.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.EXTERNAL);
Gtk.PolicyType.AUTOMATIC);
// we are only using ScrollView for the fade effect, hide scrollbars
this._scrollView.vscroll.hide();
this._adjustment = this._scrollView.vscroll.adjustment;
this._pageIndicators = new PageIndicators();

View File

@ -127,16 +127,6 @@ const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
let _backgroundCache = null;
function _fileEqual0(file1, file2) {
if (file1 == file2)
return true;
if (!file1 || !file2)
return false;
return file1.equal(file2);
}
const BackgroundCache = new Lang.Class({
Name: 'BackgroundCache',
@ -146,25 +136,25 @@ const BackgroundCache = new Lang.Class({
this._backgroundSources = {};
},
monitorFile: function(file) {
let key = file.hash();
if (this._fileMonitors[key])
monitorFile: function(filename) {
if (this._fileMonitors[filename])
return;
let file = Gio.File.new_for_path(filename);
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
monitor.connect('changed',
Lang.bind(this, function() {
this.emit('file-changed', file);
this.emit('file-changed', filename);
}));
this._fileMonitors[key] = monitor;
this._fileMonitors[filename] = monitor;
},
getAnimation: function(params) {
params = Params.parse(params, { file: null,
params = Params.parse(params, { filename: null,
onLoaded: null });
if (_fileEqual0(this._animationFile, params.file)) {
if (this._animationFilename == params.filename) {
if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
params.onLoaded(this._animation);
@ -175,10 +165,10 @@ const BackgroundCache = new Lang.Class({
return;
}
let animation = new Animation({ file: params.file });
let animation = new Animation({ filename: params.filename });
animation.load(Lang.bind(this, function() {
this._animationFile = params.file;
this._animationFilename = params.filename;
this._animation = animation;
if (params.onLoaded) {
@ -231,14 +221,14 @@ const Background = new Lang.Class({
params = Params.parse(params, { monitorIndex: 0,
layoutManager: Main.layoutManager,
settings: null,
file: null,
filename: null,
style: null });
this.background = new Meta.Background({ meta_screen: global.screen });
this.background._delegate = this;
this._settings = params.settings;
this._file = params.file;
this._filename = params.filename;
this._style = params.style;
this._monitorIndex = params.monitorIndex;
this._layoutManager = params.layoutManager;
@ -305,21 +295,20 @@ const Background = new Lang.Class({
this.background.set_gradient(shadingType, color, secondColor);
},
_watchFile: function(file) {
let key = file.hash();
if (this._fileWatches[key])
_watchFile: function(filename) {
if (this._fileWatches[filename])
return;
this._cache.monitorFile(file);
this._cache.monitorFile(filename);
let signalId = this._cache.connect('file-changed',
Lang.bind(this, function(cache, changedFile) {
if (changedFile.equal(file)) {
if (changedFile == filename) {
let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile);
this.emit('changed');
}
}));
this._fileWatches[key] = signalId;
this._fileWatches[filename] = signalId;
},
_removeAnimationTimeout: function() {
@ -342,9 +331,9 @@ const Background = new Lang.Class({
this._animation.transitionProgress,
this._style);
} else if (files.length > 0) {
this.background.set_file(files[0], this._style);
this.background.set_filename(files[0], this._style);
} else {
this.background.set_file(null, this._style);
this.background.set_filename(null, this._style);
}
this._queueUpdateAnimation();
});
@ -401,28 +390,28 @@ const Background = new Lang.Class({
GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation');
},
_loadAnimation: function(file) {
this._cache.getAnimation({ file: file,
onLoaded: Lang.bind(this, function(animation) {
this._animation = animation;
_loadAnimation: function(filename) {
this._cache.getAnimation({ filename: filename,
onLoaded: Lang.bind(this, function(animation) {
this._animation = animation;
if (!this._animation || this._cancellable.is_cancelled()) {
this._setLoaded();
return;
}
if (!this._animation || this._cancellable.is_cancelled()) {
this._setLoaded();
return;
}
this._updateAnimation();
this._watchFile(file);
})
});
this._updateAnimation();
this._watchFile(filename);
})
});
},
_loadImage: function(file) {
this.background.set_file(file, this._style);
this._watchFile(file);
_loadImage: function(filename) {
this.background.set_filename(filename, this._style);
this._watchFile(filename);
let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(file);
let image = cache.load(filename);
if (image.is_loaded())
this._setLoaded();
else {
@ -434,11 +423,11 @@ const Background = new Lang.Class({
}
},
_loadFile: function(file) {
if (file.get_basename().endsWith('.xml'))
this._loadAnimation(file);
_loadFile: function(filename) {
if (filename.endsWith('.xml'))
this._loadAnimation(filename);
else
this._loadImage(file);
this._loadImage(filename);
},
_load: function () {
@ -446,12 +435,12 @@ const Background = new Lang.Class({
this._loadPattern();
if (!this._file) {
if (!this._filename) {
this._setLoaded();
return;
}
this._loadFile(this._file);
this._loadFile(this._filename);
},
});
Signals.addSignalMethods(Background.prototype);
@ -462,12 +451,12 @@ const SystemBackground = new Lang.Class({
Name: 'SystemBackground',
_init: function() {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png');
let filename = global.datadir + '/theme/noise-texture.png';
if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_screen: global.screen });
_systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
_systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER);
_systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER);
}
this.actor = new Meta.BackgroundActor({ meta_screen: global.screen,
@ -475,7 +464,7 @@ const SystemBackground = new Lang.Class({
background: _systemBackground });
let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(file);
let image = cache.load(filename);
if (image.is_loaded()) {
image = null;
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
@ -524,17 +513,20 @@ const BackgroundSource = new Lang.Class({
},
getBackground: function(monitorIndex) {
let file = null;
let filename = null;
let style;
if (this._overrideImage != null) {
file = Gio.File.new_for_path(this._overrideImage);
filename = this._overrideImage;
style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode
} else {
style = this._settings.get_enum(BACKGROUND_STYLE_KEY);
if (style != GDesktopEnums.BackgroundStyle.NONE) {
let uri = this._settings.get_string(PICTURE_URI_KEY);
file = Gio.File.new_for_commandline_arg(uri);
if (GLib.uri_parse_scheme(uri) != null)
filename = Gio.File.new_for_uri(uri).get_path();
else
filename = uri;
}
}
@ -542,7 +534,7 @@ const BackgroundSource = new Lang.Class({
// they can have variants that depend on the aspect ratio and
// size of the monitor; for other backgrounds we can use the
// same background object for all monitors.
if (file == null || !file.get_basename().endsWith('.xml'))
if (filename == null || !filename.endsWith('.xml'))
monitorIndex = 0;
if (!(monitorIndex in this._backgrounds)) {
@ -550,7 +542,7 @@ const BackgroundSource = new Lang.Class({
monitorIndex: monitorIndex,
layoutManager: this._layoutManager,
settings: this._settings,
file: file,
filename: filename,
style: style
});
@ -583,9 +575,9 @@ const Animation = new Lang.Class({
Name: 'Animation',
_init: function(params) {
params = Params.parse(params, { file: null });
params = Params.parse(params, { filename: null });
this.file = params.file;
this.filename = params.filename;
this.keyFrameFiles = [];
this.transitionProgress = 0.0;
this.transitionDuration = 0.0;
@ -593,7 +585,9 @@ const Animation = new Lang.Class({
},
load: function(callback) {
this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() });
let file = Gio.File.new_for_path(this.filename);
this._show = new GnomeDesktop.BGSlideShow({ filename: this.filename });
this._show.load_async(null,
Lang.bind(this,
@ -613,16 +607,16 @@ const Animation = new Lang.Class({
if (this._show.get_num_slides() < 1)
return;
let [progress, duration, isFixed, filename1, filename2] = this._show.get_current_slide(monitor.width, monitor.height);
let [progress, duration, isFixed, file1, file2] = this._show.get_current_slide(monitor.width, monitor.height);
this.transitionDuration = duration;
this.transitionProgress = progress;
if (filename1)
this.keyFrameFiles.push(Gio.File.new_for_path(filename1));
if (file1)
this.keyFrameFiles.push(file1);
if (filename2)
this.keyFrameFiles.push(Gio.File.new_for_path(filename2));
if (file2)
this.keyFrameFiles.push(file2);
},
});
Signals.addSignalMethods(Animation.prototype);

View File

@ -2,6 +2,7 @@
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const St = imports.gi.St;
@ -17,7 +18,6 @@ const ELLIPSIS_CHAR = '\u2026';
// alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext;
const NC_ = function(context, str) { return str; };
// in org.gnome.desktop.interface
const CLOCK_FORMAT_KEY = 'clock-format';
@ -34,10 +34,12 @@ function _sameDay(dateA, dateB) {
return _sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate());
}
/* TODO: maybe needs config - right now we assume that Saturday and
* Sunday are non-work days (not true in e.g. Israel, it's Sunday and
* Monday there)
*/
function _isWorkDay(date) {
/* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
let days = C_('calendar-no-work', "06");
return days.indexOf(date.getDay().toString()) == -1;
return date.getDay() != 0 && date.getDay() != 6;
}
function _getBeginningOfDay(date) {
@ -88,6 +90,23 @@ function _formatEventTime(event, clockFormat, periodBegin, periodEnd) {
return ret;
}
function _getCalendarWeekForDate(date) {
// Based on the algorithms found here:
// http://en.wikipedia.org/wiki/Talk:ISO_week_date
let midnightDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
// Need to get Monday to be 1 ... Sunday to be 7
let dayOfWeek = 1 + ((midnightDate.getDay() + 6) % 7);
let nearestThursday = new Date(midnightDate.getFullYear(), midnightDate.getMonth(),
midnightDate.getDate() + (4 - dayOfWeek));
let jan1st = new Date(nearestThursday.getFullYear(), 0, 1);
let diffDate = nearestThursday - jan1st;
let dayNumber = Math.floor(Math.abs(diffDate) / MSECS_IN_DAY);
let weekNumber = Math.floor(dayNumber / 7) + 1;
return weekNumber;
}
function _getCalendarDayAbbreviation(dayNumber) {
let abbreviations = [
/* Translators: Calendar grid abbreviation for Sunday.
@ -233,11 +252,24 @@ const DBusEventSource = new Lang.Class({
this._initialized = false;
this._dbusProxy = new CalendarServer();
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
let loaded = false;
try {
this._dbusProxy.init_finish(result);
loaded = true;
} catch(e) {
log('Error loading calendars: ' + e.message);
return;
if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
// Ignore timeouts and install signals as normal, because with high
// probability the service will appear later on, and we will get a
// NameOwnerChanged which will finish loading
//
// (But still _initialized to false, because the proxy does not know
// about the HasCalendars property and would cause an exception trying
// to read it)
} else {
log('Error loading calendars: ' + e.message);
return;
}
}
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
@ -253,9 +285,11 @@ const DBusEventSource = new Lang.Class({
this.emit('notify::has-calendars');
}));
this._initialized = true;
this.emit('notify::has-calendars');
this._onNameAppeared();
this._initialized = loaded;
if (loaded) {
this.emit('notify::has-calendars');
this._onNameAppeared();
}
}));
},
@ -277,6 +311,7 @@ const DBusEventSource = new Lang.Class({
},
_onNameAppeared: function(owner) {
this._initialized = true;
this._resetCache();
this._loadEvents(true);
},
@ -652,7 +687,7 @@ const Calendar = new Lang.Class({
this._buttons.push(button);
if (this._useWeekdate && iter.getDay() == 4) {
let label = new St.Label({ text: iter.toLocaleFormat('%V'),
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
style_class: 'calendar-day-base calendar-week-number'});
layout.attach(label, rtl ? 7 : 0, row, 1, 1);
}
@ -713,6 +748,8 @@ const EventsList = new Lang.Class({
},
_addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
let eventBox = new St.BoxLayout();
eventBox.set_vertical(false);
let dayString;
if (includeDayName) {
if (event.date >= periodBegin)
@ -733,7 +770,7 @@ const EventsList = new Lang.Class({
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
let layout = this.actor.layout_manager;
layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
eventBox.add_actor(dayLabel);
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
let timeLabel = new St.Label({ style_class: 'events-day-time',
@ -753,11 +790,12 @@ const EventsList = new Lang.Class({
if (event.allDay || event.end <= periodEnd)
postEllipsisLabel.opacity = 0;
let timeLabelBoxLayout = new St.BoxLayout();
let timeLabelBoxLayout = new St.BoxLayout({ x_align: Clutter.ActorAlign.START });
timeLabelBoxLayout.add(preEllipsisLabel);
timeLabelBoxLayout.add(timeLabel);
timeLabelBoxLayout.add(postEllipsisLabel);
layout.attach(timeLabelBoxLayout, 1, index, 1, 1);
timeLabelBoxLayout.set_size(50, 1);
eventBox.add_actor(timeLabelBoxLayout);
let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary,
@ -765,7 +803,8 @@ const EventsList = new Lang.Class({
titleLabel.clutter_text.line_wrap = true;
titleLabel.clutter_text.ellipsize = false;
layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
eventBox.add_actor(titleLabel);
this._eventListBox.add_actor(eventBox);
},
_addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
@ -775,8 +814,7 @@ const EventsList = new Lang.Class({
return index;
let label = new St.Label({ style_class: 'events-day-header', text: header });
let layout = this.actor.layout_manager;
layout.attach(label, 0, index, 3, 1);
this._eventListBox.add_actor(label);
index++;
for (let n = 0; n < events.length; n++) {
@ -795,27 +833,21 @@ const EventsList = new Lang.Class({
},
_showOtherDay: function(day) {
this.actor.destroy_all_children();
let dayBegin = _getBeginningOfDay(day);
let dayEnd = _getEndOfDay(day);
let dayFormat;
let dayString;
let now = new Date();
if (_sameYear(day, now))
/* Translators: Shown on calendar heading when selected day occurs on current year */
dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %d"));
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d"));
else
/* Translators: Shown on calendar heading when selected day occurs on different year */
dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %d, %Y"));
let dayString = day.toLocaleFormat(dayFormat);
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y"));
this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true);
},
_showToday: function() {
this.actor.destroy_all_children();
let index = 0;
let now = new Date();
@ -860,6 +892,24 @@ const EventsList = new Lang.Class({
if (this._eventSource.isLoading)
return;
this.actor.destroy_all_children();
let layout = this.actor.layout_manager;
this._eventListContainer = new St.BoxLayout({ x_expand: true, y_expand: true });
this._eventListContainer.set_vertical(true);
this._eventListBox = new St.BoxLayout();
this._eventListBox.set_vertical(true);
let eventScrollView = new St.ScrollView({style_class: 'vfade',
hscrollbar_policy: Gtk.PolicyType.NEVER,
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC});
eventScrollView.add_actor(this._eventListBox);
this._eventListContainer.add_actor(eventScrollView);
layout.attach(this._eventListContainer, 0, 0, 1, 1);
let today = new Date();
if (_sameDay (this._date, today)) {
this._showToday();

View File

@ -604,9 +604,15 @@ const NetworkAgent = new Lang.Class({
Name: 'NetworkAgent',
_init: function() {
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
});
try {
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
});
} catch(e) {
// Support older versions without NetworkAgent:capabilities
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent'
});
}
this._dialogs = { };
this._vpnRequests = { };

View File

@ -36,8 +36,6 @@ const NotificationDirection = {
RECEIVED: 'chat-received'
};
const N_ = function(s) { return s; };
function makeMessageFromTpMessage(tpMessage, direction) {
let [text, flags] = tpMessage.to_text();
@ -952,70 +950,70 @@ const ChatNotification = new Lang.Class({
// Show only the time if date is on today
if(daysAgo < 1){
/* Translators: Time in 24h format */
format = N_("%H\u2236%M");
format = _("%H\u2236%M");
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a
time string in 24h format. i.e. "Yesterday, 14:30" */
// xgettext:no-c-format
format = N_("Yesterday, %H\u2236%M");
format = _("Yesterday, %H\u2236%M");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time
string in 24h format. i.e. "Monday, 14:30" */
// xgettext:no-c-format
format = N_("%A, %H\u2236%M");
format = _("%A, %H\u2236%M");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number
followed by a time string in 24h format.
i.e. "May 25, 14:30" */
// xgettext:no-c-format
format = N_("%B %d, %H\u2236%M");
format = _("%B %d, %H\u2236%M");
} else {
/* Translators: this is the month name, day number, year
number followed by a time string in 24h format.
i.e. "May 25 2012, 14:30" */
// xgettext:no-c-format
format = N_("%B %d %Y, %H\u2236%M");
format = _("%B %d %Y, %H\u2236%M");
}
} else {
// Show only the time if date is on today
if(daysAgo < 1){
/* Translators: Time in 24h format */
format = N_("%l\u2236%M %p");
format = _("%l\u2236%M %p");
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
// xgettext:no-c-format
format = N_("Yesterday, %l\u2236%M %p");
format = _("Yesterday, %l\u2236%M %p");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time
string in 12h format. i.e. "Monday, 2:30 pm" */
// xgettext:no-c-format
format = N_("%A, %l\u2236%M %p");
format = _("%A, %l\u2236%M %p");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number
followed by a time string in 12h format.
i.e. "May 25, 2:30 pm" */
// xgettext:no-c-format
format = N_("%B %d, %l\u2236%M %p");
format = _("%B %d, %l\u2236%M %p");
} else {
/* Translators: this is the month name, day number, year
number followed by a time string in 12h format.
i.e. "May 25 2012, 2:30 pm"*/
// xgettext:no-c-format
format = N_("%B %d %Y, %l\u2236%M %p");
format = _("%B %d %Y, %l\u2236%M %p");
}
}
return date.toLocaleFormat(Shell.util_translate_time_string(format));
return date.toLocaleFormat(format);
},
appendTimestamp: function() {
@ -1266,8 +1264,9 @@ const SubscriptionRequestNotification = new Lang.Class({
let file = contact.get_avatar_file();
if (file) {
let uri = file.get_uri();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
iconBox.child = textureCache.load_file_async(file, iconBox._size, iconBox._size, scaleFactor);
iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size, scaleFactor);
}
else {
iconBox.child = new St.Icon({ icon_name: 'avatar-default',

View File

@ -59,7 +59,7 @@ const DateMenuButton = new Lang.Class({
// Fill up the first column
vbox = new St.BoxLayout({vertical: true});
vbox = new St.BoxLayout({vertical: true, x_expand: true, y_expand: true });
hbox.add(vbox);
// Date
@ -96,11 +96,11 @@ const DateMenuButton = new Lang.Class({
this._openCalendarItem = new PopupMenu.PopupMenuItem(_("Open Calendar"));
this._openCalendarItem.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
vbox.add(this._openCalendarItem.actor, {y_align: St.Align.END, expand: false, y_fill: false});
this._openClocksItem = new PopupMenu.PopupMenuItem(_("Open Clocks"));
this._openClocksItem.connect('activate', Lang.bind(this, this._onOpenClocksActivate));
vbox.add(this._openClocksItem.actor, {y_align: St.Align.END, expand: true, y_fill: false});
vbox.add(this._openClocksItem.actor, {y_align: St.Align.END, expand: false, y_fill: false});
Shell.AppSystem.get_default().connect('installed-changed',
Lang.bind(this, this._appInstalledChanged));
@ -129,7 +129,7 @@ const DateMenuButton = new Lang.Class({
/* 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").
*/
let dateFormat = Shell.util_translate_time_string (N_("%A %B %e, %Y"));
let dateFormat = _("%A %B %e, %Y");
this._date.set_label(now.toLocaleFormat(dateFormat));
}
}));
@ -173,10 +173,6 @@ const DateMenuButton = new Lang.Class({
}
},
_getEventSource: function() {
return new Calendar.DBusEventSource();
},
_setEventSource: function(eventSource) {
if (this._eventSource)
this._eventSource.destroy();
@ -194,7 +190,7 @@ const DateMenuButton = new Lang.Class({
let eventSource;
let showEvents = Main.sessionMode.showCalendarEvents;
if (showEvents) {
eventSource = this._getEventSource();
eventSource = new Calendar.DBusEventSource();
} else {
eventSource = new Calendar.EmptyEventSource();
}

View File

@ -6,6 +6,8 @@ const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const Main = imports.ui.main;
const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80;
@ -13,9 +15,10 @@ const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction',
Extends: Clutter.GestureAction,
_init : function(side) {
_init : function(side, allowedModes) {
this.parent();
this._side = side;
this._allowedModes = allowedModes;
this.set_n_touch_points(1);
global.display.connect('grab-op-begin', Lang.bind(this, function() {
@ -34,6 +37,9 @@ const EdgeDragAction = new Lang.Class({
if (this.get_n_current_points() == 0)
return false;
if (!(this._allowedModes & Main.keybindingMode))
return false;
let [x, y] = this.get_press_coords(0);
let monitorRect = this._getMonitorRect(x, y);

View File

@ -77,7 +77,6 @@ function init() {
window._ = Gettext.gettext;
window.C_ = Gettext.pgettext;
window.ngettext = Gettext.ngettext;
window.N_ = function(s) { return s; };
// Miscellaneous monkeypatching
_patchContainerClass(St.BoxLayout);

View File

@ -203,16 +203,14 @@ const InstallExtensionDialog = new Lang.Class({
let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name);
let box = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
let box = new St.BoxLayout();
this.contentLayout.add(box);
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) })
let icon = new St.Icon({ gicon: gicon });
box.add(icon);
let label = new St.Label({ style_class: 'prompt-dialog-headline',
text: message });
let label = new St.Label({ text: message });
box.add(label);
},

View File

@ -74,7 +74,7 @@ function disableExtension(uuid) {
if (extension.stylesheet) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.unload_stylesheet(extension.stylesheet);
theme.unload_stylesheet(extension.stylesheet.get_path());
}
try {
@ -118,7 +118,7 @@ function enableExtension(uuid) {
let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
if (stylesheetFile.query_exists(null)) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.load_stylesheet(stylesheetFile);
theme.load_stylesheet(stylesheetFile.get_path());
extension.stylesheet = stylesheetFile;
break;
}

View File

@ -187,7 +187,14 @@ const Keyboard = new Lang.Class({
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
Lang.bind(this, this._sync),
Lang.bind(this, this._sync));
this._daemonProxy = null;
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME,
CURSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
@ -249,28 +256,15 @@ const Keyboard = new Lang.Class({
this.actor = null;
this._destroySource();
if (this._daemonProxy) {
this._daemonProxy.QuitRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
this._daemonProxy = null;
}
this._daemonProxy.QuitRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
},
_setupKeyboard: function() {
if (!this._daemonProxy) {
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
}
this._daemonProxy.RunRemote(function (result, error) {
if (error) {
log(error.message);

View File

@ -422,7 +422,10 @@ const LayoutManager = new Lang.Class({
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1);
this.keyboardIndex = this.primaryIndex;
if (this.keyboardIndex < 0)
this.keyboardIndex = this.primaryIndex;
else
this._updateKeyboardBox();
this.trayBox.set_position(this.bottomMonitor.x,
this.bottomMonitor.y + this.bottomMonitor.height);

View File

@ -129,9 +129,6 @@ function _initializeUI() {
Shell.WindowTracker.get_default();
Shell.AppUsage.get_default();
let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
resource._register();
_loadDefaultStylesheet();
// Setup the stage hierarchy early
@ -225,26 +222,12 @@ function _initializeUI() {
});
}
function _getDefaultStylesheet() {
let stylesheet;
stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + sessionMode.stylesheetName);
if (stylesheet.query_exists(null))
return stylesheet;
stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + sessionMode.stylesheetName);
if (stylesheet.query_exists(null))
return stylesheet;
return null;
}
function _loadDefaultStylesheet() {
if (!sessionMode.isPrimary)
return;
let stylesheet = _getDefaultStylesheet();
if (_defaultCssStylesheet && _defaultCssStylesheet.equal(stylesheet))
let stylesheet = global.datadir + '/theme/' + sessionMode.stylesheetName;
if (_defaultCssStylesheet == stylesheet)
return;
_defaultCssStylesheet = stylesheet;
@ -271,7 +254,7 @@ function getThemeStylesheet() {
* Set the theme CSS file that the shell will load
*/
function setThemeStylesheet(cssStylesheet) {
_cssStylesheet = Gio.File.new_for_path(cssStylesheet);
_cssStylesheet = cssStylesheet;
}
/**

View File

@ -1951,7 +1951,9 @@ const MessageTray = new Lang.Class({
this._messageTrayMenuButton.actor.connect('key-press-event',
Lang.bind(this, this._onTrayButtonKeyPress));
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM);
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW);
gesture.connect('activated', Lang.bind(this, this.toggle));
global.stage.add_action(gesture);
},

View File

@ -194,7 +194,7 @@ const ModalDialog = new Lang.Class({
},
placeSpinner: function(layoutInfo) {
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();

View File

@ -181,7 +181,6 @@ const AppMenuButton = new Lang.Class({
this._targetApp = null;
this._appMenuNotifyId = 0;
this._actionGroupNotifyId = 0;
this._busyNotifyId = 0;
let bin = new St.Bin({ name: 'appMenu' });
bin.connect('style-changed', Lang.bind(this, this._onStyleChanged));
@ -274,7 +273,7 @@ const AppMenuButton = new Lang.Class({
_onStyleChanged: function(actor) {
let node = actor.get_theme_node();
let [success, icon] = node.lookup_url('spinner-image', false);
if (!success || (this._spinnerIcon && this._spinnerIcon.equal(icon)))
if (!success || this._spinnerIcon == icon)
return;
this._spinnerIcon = icon;
this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
@ -458,17 +457,12 @@ const AppMenuButton = new Lang.Class({
this._targetApp.disconnect(this._actionGroupNotifyId);
this._actionGroupNotifyId = 0;
}
if (this._busyNotifyId) {
this._targetApp.disconnect(this._busyNotifyId);
this._busyNotifyId = 0;
}
this._targetApp = targetApp;
if (this._targetApp) {
this._appMenuNotifyId = this._targetApp.connect('notify::menu', Lang.bind(this, this._sync));
this._actionGroupNotifyId = this._targetApp.connect('notify::action-group', Lang.bind(this, this._sync));
this._busyNotifyId = this._targetApp.connect('notify::busy', Lang.bind(this, this._sync));
this._label.setText(this._targetApp.get_name());
this.actor.set_accessible_name(this._targetApp.get_name());
}
@ -482,7 +476,7 @@ const AppMenuButton = new Lang.Class({
let isBusy = (this._targetApp != null &&
(this._targetApp.get_state() == Shell.AppState.STARTING ||
this._targetApp.get_busy()));
this._targetApp.get_state() == Shell.AppState.BUSY));
if (isBusy)
this.startAnimation();
else

View File

@ -85,8 +85,7 @@ const Clock = new Lang.Class({
let date = new Date();
/* Translators: This is a time format for a date in
long format */
let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
this._date.text = date.toLocaleFormat(dateFormat);
this._date.text = date.toLocaleFormat(_("%A, %B %d"));
},
destroy: function() {
@ -670,9 +669,7 @@ const ScreenShield = new Lang.Class({
if (this._lockScreenState != MessageTray.State.SHOWN)
return Clutter.EVENT_PROPAGATE;
let isEnter = (symbol == Clutter.KEY_Return ||
symbol == Clutter.KEY_KP_Enter ||
symbol == Clutter.KEY_ISO_Enter);
let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter);
if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape))
return Clutter.EVENT_PROPAGATE;
@ -1335,8 +1332,6 @@ const ScreenShield = new Lang.Class({
// If the previous shell crashed, and gnome-session restarted us, then re-lock
lockIfWasLocked: function() {
if (!this._settings.get_boolean(LOCK_ENABLED_KEY))
return;
let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR);
if (wasLocked === null)
return;

View File

@ -90,12 +90,6 @@ const GnomeShell = new Lang.Class({
function(display, action, deviceid, timestamp) {
this._emitAcceleratorActivated(action, deviceid, timestamp);
}));
this._cachedOverviewVisible = false;
Main.overview.connect('showing',
Lang.bind(this, this._checkOverviewVisibleChanged));
Main.overview.connect('hidden',
Lang.bind(this, this._checkOverviewVisibleChanged));
},
/**
@ -140,7 +134,7 @@ const GnomeShell = new Lang.Class({
params[param] = params[param].deep_unpack();
let monitorIndex = -1;
if (params['monitor'] >= 0)
if (params['monitor'])
monitorIndex = params['monitor'];
let icon = null;
@ -241,15 +235,8 @@ const GnomeShell = new Lang.Class({
Mode: global.session_mode,
_checkOverviewVisibleChanged: function() {
if (Main.overview.visible !== this._cachedOverviewVisible) {
this._cachedOverviewVisible = Main.overview.visible;
this._dbusImpl.emit_property_changed('OverviewActive', new GLib.Variant('b', this._cachedOverviewVisible));
}
},
get OverviewActive() {
return this._cachedOverviewVisible;
return Main.overview.visible;
},
set OverviewActive(visible) {

View File

@ -381,10 +381,6 @@ const InputSourceManager = new Lang.Class({
if (this._mruSources.length > 0)
this._mruSources[0].activate();
// All ibus engines are preloaded here to reduce the launching time
// when users switch the input sources.
this._ibusManager.preloadEngines(Object.keys(this._ibusSources));
},
_makeEngineShortName: function(engineDesc) {

View File

@ -876,8 +876,7 @@ const NMWirelessDialog = new Lang.Class({
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER });
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
this._noNetworksSpinner = new Animation.AnimatedIcon(global.datadir + '/theme/process-working.svg', 24, 24);
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
text: _("No Networks") }));

View File

@ -15,7 +15,6 @@ const RfkillManagerInterface = '<node> \
<interface name="org.gnome.SettingsDaemon.Rfkill"> \
<property name="AirplaneMode" type="b" access="readwrite" /> \
<property name="HardwareAirplaneMode" type="b" access="read" /> \
<property name="ShouldShowAirplaneMode" type="b" access="read" /> \
</interface> \
</node>';
@ -49,10 +48,6 @@ const RfkillManager = new Lang.Class({
return this._proxy.HardwareAirplaneMode;
},
get shouldShowAirplaneMode() {
return this._proxy.ShouldShowAirplaneMode;
},
_changed: function() {
this.emit('airplane-mode-changed');
}
@ -106,10 +101,11 @@ const Indicator = new Lang.Class({
_sync: function() {
let airplaneMode = this._manager.airplaneMode;
let hwAirplaneMode = this._manager.hwAirplaneMode;
let showAirplaneMode = this._manager.shouldShowAirplaneMode;
let changed = (airplaneMode != this._indicator.visible) ||
(hwAirplaneMode != this._offItem.actor.visible);
this._indicator.visible = (airplaneMode && showAirplaneMode);
this._item.actor.visible = (airplaneMode && showAirplaneMode);
this._indicator.visible = airplaneMode;
this._item.actor.visible = airplaneMode;
this._offItem.setSensitive(!hwAirplaneMode);
if (hwAirplaneMode)

View File

@ -87,6 +87,8 @@ const SwitcherPopup = new Lang.Class({
let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT);
let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT);
let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM);
let vPadding = this.actor.get_theme_node().get_vertical_padding();
let hPadding = leftPadding + rightPadding;
// Allocate the switcherList

View File

@ -65,7 +65,8 @@ const ShowOverviewAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
return this.get_n_current_points() == this.get_n_touch_points();
return Main.keybindingMode == Shell.KeyBindingMode.NORMAL &&
this.get_n_current_points() == this.get_n_touch_points();
},
_getBoundingRect : function(motion) {
@ -215,7 +216,8 @@ const ViewSelector = new Lang.Class({
let gesture;
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT);
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT,
Shell.KeyBindingMode.NORMAL);
gesture.connect('activated', Lang.bind(this, function() {
if (Main.overview.visible)
Main.overview.hide();

View File

@ -478,7 +478,9 @@ const WorkspaceSwitchAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
return this.get_n_current_points() == this.get_n_touch_points();
let allowedModes = Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.OVERVIEW;
return this.get_n_current_points() == this.get_n_touch_points() &&
(allowedModes & Main.keybindingMode);
},
vfunc_gesture_end : function(action, actor) {
@ -526,7 +528,7 @@ const AppSwitchAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
if (Main.overview.visible) {
if (Main.keybindingMode != Shell.KeyBindingMode.NORMAL) {
this.cancel();
return false;
}

View File

@ -68,7 +68,6 @@ th
tr
ug
uk
uz@cyrillic
vi
zh_CN
zh_HK

984
po/an.po

File diff suppressed because it is too large Load Diff

364
po/cs.po
View File

@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-11-26 08:34+0000\n"
"PO-Revision-Date: 2014-11-26 12:05+0100\n"
"POT-Creation-Date: 2014-09-22 19:42+0000\n"
"PO-Revision-Date: 2014-09-23 07:05+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
@ -293,8 +293,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukazatele"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Network Login"
msgstr "Přihlášení do sítě"
msgid "Captive Portal"
msgstr "Přihlašovací portál"
#: ../js/extensionPrefs/main.js:123
#, javascript-format
@ -309,7 +309,7 @@ msgstr "Rozšíření GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:916
#: ../js/ui/status/network.js:915
msgid "Cancel"
msgstr "Zrušit"
@ -327,33 +327,33 @@ msgctxt "button"
msgid "Sign In"
msgstr "Přihlásit se"
#: ../js/gdm/loginDialog.js:275
#: ../js/gdm/loginDialog.js:269
msgid "Choose Session"
msgstr "Vybrat sezení"
#: ../js/gdm/loginDialog.js:434
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:619
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(např. uživatel nebo %s)"
#: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287
msgid "Username: "
msgstr "Uživatelské jméno: "
#: ../js/gdm/loginDialog.js:955
#: ../js/gdm/loginDialog.js:922
msgid "Login Window"
msgstr "Přihlašovací okno"
#: ../js/gdm/util.js:341
#: ../js/gdm/util.js:323
msgid "Authentication error"
msgstr "Chyba ověření"
#: ../js/gdm/util.js:473
#: ../js/gdm/util.js:453
msgid "(or swipe finger)"
msgstr "(nebo otiskněte prst)"
@ -374,31 +374,31 @@ msgstr "Vykonání „%s“ selhalo:"
msgid "Web Authentication Redirect"
msgstr "Přesměrováno na ověření přes web"
#: ../js/ui/appDisplay.js:770
#: ../js/ui/appDisplay.js:772
msgid "Frequently used applications will appear here"
msgstr "Zde se objeví často používané aplikace"
#: ../js/ui/appDisplay.js:881
#: ../js/ui/appDisplay.js:883
msgid "Frequent"
msgstr "Časté"
#: ../js/ui/appDisplay.js:888
#: ../js/ui/appDisplay.js:890
msgid "All"
msgstr "Všechny"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1790
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1822
msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1831
msgid "Show Details"
msgstr "Zobrazit podrobnosti"
@ -421,23 +421,17 @@ msgstr "Nastavení"
msgid "Change Background…"
msgstr "Změnit pozadí…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#. */
#: ../js/ui/calendar.js:68
#: ../js/ui/calendar.js:67
msgctxt "event list time"
msgid "All Day"
msgstr "Celý den"
#. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:75
#: ../js/ui/calendar.js:73
msgctxt "event list time"
msgid "%H%M"
msgstr "%k%M"
@ -445,7 +439,7 @@ msgstr "%k%M"
#. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */
#: ../js/ui/calendar.js:84
#: ../js/ui/calendar.js:82
msgctxt "event list time"
msgid "%l%M%p"
msgstr "%l%M%p"
@ -455,43 +449,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#. */
#: ../js/ui/calendar.js:115
#: ../js/ui/calendar.js:113
msgctxt "grid sunday"
msgid "S"
msgstr "Ne"
#. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:117
#: ../js/ui/calendar.js:115
msgctxt "grid monday"
msgid "M"
msgstr "Po"
#. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:119
#: ../js/ui/calendar.js:117
msgctxt "grid tuesday"
msgid "T"
msgstr "Út"
#. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:121
#: ../js/ui/calendar.js:119
msgctxt "grid wednesday"
msgid "W"
msgstr "St"
#. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:123
#: ../js/ui/calendar.js:121
msgctxt "grid thursday"
msgid "T"
msgstr "Čt"
#. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:125
#: ../js/ui/calendar.js:123
msgctxt "grid friday"
msgid "F"
msgstr "Pá"
#. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:127
#: ../js/ui/calendar.js:125
msgctxt "grid saturday"
msgid "S"
msgstr "So"
@ -502,83 +496,85 @@ msgstr "So"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#. */
#: ../js/ui/calendar.js:140
#: ../js/ui/calendar.js:138
msgctxt "list sunday"
msgid "Su"
msgstr "Ne"
#. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:142
#: ../js/ui/calendar.js:140
msgctxt "list monday"
msgid "M"
msgstr "Po"
#. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:144
#: ../js/ui/calendar.js:142
msgctxt "list tuesday"
msgid "T"
msgstr "Út"
#. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:146
#: ../js/ui/calendar.js:144
msgctxt "list wednesday"
msgid "W"
msgstr "St"
#. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:148
#: ../js/ui/calendar.js:146
msgctxt "list thursday"
msgid "Th"
msgstr "Čt"
#. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:150
#: ../js/ui/calendar.js:148
msgctxt "list friday"
msgid "F"
msgstr "Pá"
#. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:152
#: ../js/ui/calendar.js:150
msgctxt "list saturday"
msgid "S"
msgstr "So"
#: ../js/ui/calendar.js:461
#: ../js/ui/calendar.js:453
msgid "Previous month"
msgstr "Předchozí měsíc"
#: ../js/ui/calendar.js:471
#: ../js/ui/calendar.js:463
msgid "Next month"
msgstr "Následující měsíc"
#. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:806
#: ../js/ui/calendar.js:781
msgid "Nothing Scheduled"
msgstr "nic nenaplánováno"
#: ../js/ui/calendar.js:825
#. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:799
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %e. %B"
#: ../js/ui/calendar.js:829
#. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:802
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %e. %B %Y"
#: ../js/ui/calendar.js:841
#: ../js/ui/calendar.js:813
msgid "Today"
msgstr "Dnes"
#: ../js/ui/calendar.js:845
#: ../js/ui/calendar.js:817
msgid "Tomorrow"
msgstr "Zítra"
#: ../js/ui/calendar.js:856
#: ../js/ui/calendar.js:828
msgid "This week"
msgstr "Tento týden"
#: ../js/ui/calendar.js:864
#: ../js/ui/calendar.js:836
msgid "Next week"
msgstr "Následující týden"
@ -612,7 +608,7 @@ msgid "Type again:"
msgstr "Napište znovu:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918
msgid "Connect"
msgstr "Připojit"
@ -706,102 +702,102 @@ msgstr "Ověřit"
msgid "Sorry, that didn't work. Please try again."
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
#: ../js/ui/components/telepathyClient.js:242
#: ../js/ui/components/telepathyClient.js:240
msgid "Invitation"
msgstr "Pozvání"
#: ../js/ui/components/telepathyClient.js:302
#: ../js/ui/components/telepathyClient.js:300
msgid "Call"
msgstr "Hovor"
#: ../js/ui/components/telepathyClient.js:318
#: ../js/ui/components/telepathyClient.js:316
msgid "File Transfer"
msgstr "Přenos souborů"
#: ../js/ui/components/telepathyClient.js:422
#: ../js/ui/components/telepathyClient.js:420
msgid "Chat"
msgstr "Diskuse"
#: ../js/ui/components/telepathyClient.js:485
#: ../js/ui/components/telepathyClient.js:483
msgid "Unmute"
msgstr "Zrušit ztlumení"
#: ../js/ui/components/telepathyClient.js:485
#: ../js/ui/components/telepathyClient.js:483
msgid "Mute"
msgstr "Ztlumit"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:955
#: ../js/ui/components/telepathyClient.js:953
msgid "%H%M"
msgstr "%k%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:962
#: ../js/ui/components/telepathyClient.js:960
msgid "Yesterday, %H%M"
msgstr "včera, %k%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:969
#: ../js/ui/components/telepathyClient.js:967
msgid "%A, %H%M"
msgstr "%A, %k%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:976
#: ../js/ui/components/telepathyClient.js:974
msgid "%B %d, %H%M"
msgstr "%e. %B %k%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:982
#: ../js/ui/components/telepathyClient.js:980
msgid "%B %d %Y, %H%M"
msgstr "%e. %B %Y, %k%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:988
#: ../js/ui/components/telepathyClient.js:986
msgid "%l%M %p"
msgstr "%l%M%p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:995
#: ../js/ui/components/telepathyClient.js:993
msgid "Yesterday, %l%M %p"
msgstr "včera, %l%M%p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1002
#: ../js/ui/components/telepathyClient.js:1000
msgid "%A, %l%M %p"
msgstr "%A, %l%M%p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1009
#: ../js/ui/components/telepathyClient.js:1007
msgid "%B %d, %l%M %p"
msgstr "%e. %B, %l%M%p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1015
#: ../js/ui/components/telepathyClient.js:1013
msgid "%B %d %Y, %l%M %p"
msgstr "%e. %B %Y, %l%M%p"
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:1047
#: ../js/ui/components/telepathyClient.js:1045
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s je teď znám jako %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1151
#: ../js/ui/components/telepathyClient.js:1149
#, javascript-format
msgid "Invitation to %s"
msgstr "Pozvánka na připojení k %s"
@ -809,38 +805,38 @@ msgstr "Pozvánka na připojení k %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1157
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s vás zve do %s"
#: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1287
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1194
#: ../js/ui/components/telepathyClient.js:1228
#: ../js/ui/components/telepathyClient.js:1286
msgid "Decline"
msgstr "Odmítnout"
#: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1165
#: ../js/ui/components/telepathyClient.js:1234
#: ../js/ui/components/telepathyClient.js:1291
msgid "Accept"
msgstr "Přijmout"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1184
#, javascript-format
msgid "Video call from %s"
msgstr "Videohovor od %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1189
#: ../js/ui/components/telepathyClient.js:1187
#, javascript-format
msgid "Call from %s"
msgstr "Hovor od %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1201
msgid "Answer"
msgstr "Zvednout"
@ -849,110 +845,110 @@ msgstr "Zvednout"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1224
#: ../js/ui/components/telepathyClient.js:1222
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s vám posílá %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1253
#: ../js/ui/components/telepathyClient.js:1251
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s vás žádá o oprávnění vidět, že jste dostupní"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1337
msgid "Network error"
msgstr "Chyba sítě"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1339
msgid "Authentication failed"
msgstr "Ověření selhalo"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1341
msgid "Encryption error"
msgstr "Chyba šifrování"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1343
msgid "Certificate not provided"
msgstr "Certifikát neposkytnut"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1345
msgid "Certificate untrusted"
msgstr "Nedůvěryhodný certifikát"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate expired"
msgstr "Platnost certifikátu vypršela"
#: ../js/ui/components/telepathyClient.js:1350
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate not activated"
msgstr "Certifikát není aktivován"
#: ../js/ui/components/telepathyClient.js:1352
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate hostname mismatch"
msgstr "Název počítače certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1354
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate fingerprint mismatch"
msgstr "Otisk prstu certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate self-signed"
msgstr "Certifikát je podepsán sám sebou"
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1357
msgid "Status is set to offline"
msgstr "Stav nastaven na „Odhlášen“"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1359
msgid "Encryption is not available"
msgstr "Šifrování není dostupné"
#: ../js/ui/components/telepathyClient.js:1362
#: ../js/ui/components/telepathyClient.js:1361
msgid "Certificate is invalid"
msgstr "Certifikát je neplatný"
#: ../js/ui/components/telepathyClient.js:1364
#: ../js/ui/components/telepathyClient.js:1363
msgid "Connection has been refused"
msgstr "Spojení bylo odmítnuto"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1365
msgid "Connection can't be established"
msgstr "Spojení nemohlo bát navázáno"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been lost"
msgstr "Spojení bylo ztraceno"
#: ../js/ui/components/telepathyClient.js:1370
#: ../js/ui/components/telepathyClient.js:1369
msgid "This account is already connected to the server"
msgstr "Tento účet je již připojen k serveru"
#: ../js/ui/components/telepathyClient.js:1372
#: ../js/ui/components/telepathyClient.js:1371
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj"
#: ../js/ui/components/telepathyClient.js:1374
#: ../js/ui/components/telepathyClient.js:1373
msgid "The account already exists on the server"
msgstr "Takový účet již na serveru existuje"
#: ../js/ui/components/telepathyClient.js:1376
#: ../js/ui/components/telepathyClient.js:1375
msgid "Server is currently too busy to handle the connection"
msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení"
#: ../js/ui/components/telepathyClient.js:1378
#: ../js/ui/components/telepathyClient.js:1377
msgid "Certificate has been revoked"
msgstr "Certifikát byl odvolán"
#: ../js/ui/components/telepathyClient.js:1380
#: ../js/ui/components/telepathyClient.js:1379
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z "
"kryptografického hlediska slabý"
#: ../js/ui/components/telepathyClient.js:1382
#: ../js/ui/components/telepathyClient.js:1381
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -960,22 +956,22 @@ msgstr ""
"Délka certifikátu serveru nebo délka zřetězených certifikátů serveru "
"přesáhla omezení dané kryptografickou knihovnou"
#: ../js/ui/components/telepathyClient.js:1384
#: ../js/ui/components/telepathyClient.js:1383
msgid "Internal error"
msgstr "Vnitřní chyba"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1394
#: ../js/ui/components/telepathyClient.js:1393
#, javascript-format
msgid "Unable to connect to %s"
msgstr "Nelze se připojit k „%s“"
#: ../js/ui/components/telepathyClient.js:1399
#: ../js/ui/components/telepathyClient.js:1398
msgid "View account"
msgstr "Zobrazit účet"
#: ../js/ui/components/telepathyClient.js:1436
#: ../js/ui/components/telepathyClient.js:1435
msgid "Unknown reason"
msgstr "Neznámý důvod"
@ -991,15 +987,15 @@ msgstr "Zobrazit aplikace"
msgid "Dash"
msgstr "Oblíbené"
#: ../js/ui/dateMenu.js:97
#: ../js/ui/dateMenu.js:96
msgid "Open Calendar"
msgstr "Otevřít kalendář"
#: ../js/ui/dateMenu.js:101
#: ../js/ui/dateMenu.js:100
msgid "Open Clocks"
msgstr "Otevřít Hodiny"
#: ../js/ui/dateMenu.js:108
#: ../js/ui/dateMenu.js:107
msgid "Date & Time Settings"
msgstr "Nastavení data a času"
@ -1007,7 +1003,7 @@ msgstr "Nastavení data a času"
#. 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").
#. */
#: ../js/ui/dateMenu.js:132
#: ../js/ui/dateMenu.js:204
msgid "%A %B %e, %Y"
msgstr "%A, %e. %B, %Y"
@ -1158,7 +1154,7 @@ msgstr "Instalovat"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
#: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
msgid "Keyboard"
msgstr "Klávesnice"
@ -1214,48 +1210,39 @@ msgstr "Zobrazit zdroj"
msgid "Web Page"
msgstr "Webová stránka"
#: ../js/ui/messageTray.js:1332
#: ../js/ui/messageTray.js:1327
msgid "Open"
msgstr "Otevřít"
#: ../js/ui/messageTray.js:1339
#: ../js/ui/messageTray.js:1334
msgid "Remove"
msgstr "Odstranit"
#: ../js/ui/messageTray.js:1636
#: ../js/ui/messageTray.js:1631
msgid "Notifications"
msgstr "Upozornění"
#: ../js/ui/messageTray.js:1643
#: ../js/ui/messageTray.js:1638
msgid "Clear Messages"
msgstr "Vymazat zprávy"
#: ../js/ui/messageTray.js:1662
#: ../js/ui/messageTray.js:1657
msgid "Notification Settings"
msgstr "Nastavení upozornění"
#: ../js/ui/messageTray.js:1715
#: ../js/ui/messageTray.js:1710
msgid "Tray Menu"
msgstr "Nabídka lišty zpráv"
#: ../js/ui/messageTray.js:1939
#: ../js/ui/messageTray.js:1934
msgid "No Messages"
msgstr "Žádné zprávy"
#: ../js/ui/messageTray.js:1984
#: ../js/ui/messageTray.js:1979
msgid "Message Tray"
msgstr "Lišta zpráv"
#: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nová zpráva"
msgstr[1] "%d nové zprávy"
msgstr[2] "%d nových zpráv"
#: ../js/ui/messageTray.js:3011
#: ../js/ui/messageTray.js:2992
msgid "System Information"
msgstr "Informace o systému"
@ -1264,6 +1251,14 @@ msgctxt "program"
msgid "Unknown"
msgstr "Neznámé"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nová zpráva"
msgstr[1] "%d nové zprávy"
msgstr[2] "%d nových zpráv"
#: ../js/ui/overview.js:84
msgid "Undo"
msgstr "Zpět"
@ -1316,7 +1311,7 @@ msgstr "Restartuje se…"
msgid "%A, %B %d"
msgstr "%A, %e. %B"
#: ../js/ui/screenShield.js:154
#: ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1324,27 +1319,27 @@ msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345
msgid "Lock"
msgstr "Uzamknout"
#: ../js/ui/screenShield.js:709
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME potřebuje uzamknout obrazovku"
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
msgid "Unable to lock"
msgstr "Nelze uzamknout obrazovku"
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305
msgid "Lock was blocked by an application"
msgstr "Zamknutí bylo zablokováno některou z aplikací"
#: ../js/ui/search.js:611
#: ../js/ui/search.js:594
msgid "Searching…"
msgstr "Hledá se…"
#: ../js/ui/search.js:613
#: ../js/ui/search.js:596
msgid "No results."
msgstr "Žádné výsledky."
@ -1421,9 +1416,9 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:118
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:114
msgid "Turn Off"
msgstr "Vypnout"
@ -1439,7 +1434,7 @@ msgstr[0] "%d připojené zařízení"
msgstr[1] "%d připojená zařízení"
msgstr[2] "%d připojených zařízení"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
msgid "Not Connected"
msgstr "Nepřipojeno"
@ -1447,7 +1442,7 @@ msgstr "Nepřipojeno"
msgid "Brightness"
msgstr "Jas"
#: ../js/ui/status/keyboard.js:563
#: ../js/ui/status/keyboard.js:547
msgid "Show Keyboard Layout"
msgstr "Zobrazit rozložení klávesnice"
@ -1475,8 +1470,8 @@ msgstr "Povoleno"
msgid "<unknown>"
msgstr "<neznámé>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1512
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511
msgid "Off"
msgstr "Vypnuto"
@ -1494,7 +1489,7 @@ msgstr "Nespravováno"
msgid "Disconnecting"
msgstr "Odpojuje se…"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
msgid "Connecting"
msgstr "Připojuje se…"
@ -1515,7 +1510,7 @@ msgstr "Schází firmware"
msgid "Unavailable"
msgstr "Nedostupné"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695
msgid "Connection failed"
msgstr "Připojení selhalo"
@ -1527,7 +1522,7 @@ msgstr "Nastavení připojení po drátu"
msgid "Mobile Broadband Settings"
msgstr "Nastavení mobilní širokopásmové sítě"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
msgid "Hardware Disabled"
msgstr "Hardware zakázán"
@ -1567,60 +1562,60 @@ msgstr "Sítě WiFi"
msgid "Select a network"
msgstr "Vyberte síť"
#: ../js/ui/status/network.js:883
#: ../js/ui/status/network.js:882
msgid "No Networks"
msgstr "Žádné sítě"
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off"
msgstr "K vypnutí použijte fyzický vypínač"
#: ../js/ui/status/network.js:1174
#: ../js/ui/status/network.js:1173
msgid "Select Network"
msgstr "Vybrat síť"
#: ../js/ui/status/network.js:1180
#: ../js/ui/status/network.js:1179
msgid "Wi-Fi Settings"
msgstr "Nastavení WiFi"
#: ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1281
msgid "Turn On"
msgstr "Zapnout"
#: ../js/ui/status/network.js:1299
#: ../js/ui/status/network.js:1298
msgid "Hotspot Active"
msgstr "Hotspot aktivní"
#: ../js/ui/status/network.js:1410
#: ../js/ui/status/network.js:1409
msgid "connecting..."
msgstr "připojování…"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1413
#: ../js/ui/status/network.js:1412
msgid "authentication required"
msgstr "je vyžadováno ověření"
#: ../js/ui/status/network.js:1415
#: ../js/ui/status/network.js:1414
msgid "connection failed"
msgstr "připojení selhalo"
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89
msgid "Network Settings"
msgstr "Nastavení sítě"
#: ../js/ui/status/network.js:1483
#: ../js/ui/status/network.js:1482
msgid "VPN Settings"
msgstr "Nastavení VPN"
#: ../js/ui/status/network.js:1502
#: ../js/ui/status/network.js:1501
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1657
#: ../js/ui/status/network.js:1656
msgid "Network Manager"
msgstr "Network Manager"
#: ../js/ui/status/network.js:1697
#: ../js/ui/status/network.js:1696
msgid "Activation of network connection failed"
msgstr "Aktivace síťového připojení selhala"
@ -1654,11 +1649,11 @@ msgstr "Záložní zdroj"
msgid "Battery"
msgstr "Baterie"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode"
msgstr "Režim „letadlo“"
#: ../js/ui/status/rfkill.js:90
#: ../js/ui/status/rfkill.js:85
msgid "On"
msgstr "Zapnuto"
@ -1838,3 +1833,40 @@ msgstr "Heslo nemůže být prázdné."
#: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialogové okno ověření bylo uživatelem zrušeno"
#~ msgid "The maximum accuracy level of location."
#~ msgstr "Maximální míra přesnosti určení polohy"
#~ msgid ""
#~ "Configures the maximum level of location accuracy applications are "
#~ "allowed to see. Valid options are 'off' (disable location tracking), "
#~ "'country', 'city', 'neighborhood', 'street', and 'exact' (typically "
#~ "requires GPS receiver). Please keep in mind that this only controls what "
#~ "GeoClue will allow applications to see and they can find user's location "
#~ "on their own using network resources (albeit with street-level accuracy "
#~ "at best)."
#~ msgstr ""
#~ "Nastavuje maximální míru přesnosti určení polohy, kterou mohou aplikace "
#~ "vidět. Platné hodnoty jsou „off“ (sledování polohy vypnuto), "
#~ "„country“ (země), „city“ (město), „neighborhood“ (čtvrť), "
#~ "„street“ (ulice) a „exact“ (přesná, typicky vyžaduje přijímač signálu "
#~ "GPS). Uvědomte si, že tímto se řídí, pouze kolik toho GeoClue dovolí "
#~ "vidět aplikacím, které si ale mohou polohu uživatele zjišťovat samy podle "
#~ "síťových zdrojů (třebaže s nejlepší přesností na úrovni ulic)."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Uspořádání tlačítek v záhlaví"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.desktop.wm."
#~ "preferences"
#~ msgid "Extension"
#~ msgstr "Rozšíření"
#~ msgid "Select an extension to configure using the combobox above."
#~ msgstr ""
#~ "Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."

325
po/es.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-11-12 08:29+0000\n"
"PO-Revision-Date: 2014-11-12 12:29+0100\n"
"POT-Creation-Date: 2014-10-06 07:46+0000\n"
"PO-Revision-Date: 2014-10-06 13:00+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"Language: es\n"
@ -304,9 +304,8 @@ msgstr ""
"Retardo al cambiar el foco del ratón hasta que el puntero deja de moverse"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
#| msgid "Network error"
msgid "Network Login"
msgstr "Inicio de sesión de la red"
msgid "Captive Portal"
msgstr "Portal captivo"
#: ../js/extensionPrefs/main.js:123
#, javascript-format
@ -320,7 +319,7 @@ msgstr "Extensiones de GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:916
#: ../js/ui/status/network.js:915
msgid "Cancel"
msgstr "Cancelar"
@ -338,33 +337,33 @@ msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:275
#: ../js/gdm/loginDialog.js:269
msgid "Choose Session"
msgstr "Elegir sesión"
#: ../js/gdm/loginDialog.js:434
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:619
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(ej., usuario o %s)"
#: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287
msgid "Username: "
msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:953
#: ../js/gdm/loginDialog.js:922
msgid "Login Window"
msgstr "Ventana de inicio de sesión"
#: ../js/gdm/util.js:341
#: ../js/gdm/util.js:323
msgid "Authentication error"
msgstr "Error de autenticación"
#: ../js/gdm/util.js:473
#: ../js/gdm/util.js:453
msgid "(or swipe finger)"
msgstr "(o pase el dedo)"
@ -385,31 +384,31 @@ msgstr "Falló la ejecución de «%s»:"
msgid "Web Authentication Redirect"
msgstr "Redirección para autenticación web"
#: ../js/ui/appDisplay.js:770
#: ../js/ui/appDisplay.js:772
msgid "Frequently used applications will appear here"
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:881
#: ../js/ui/appDisplay.js:883
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:888
#: ../js/ui/appDisplay.js:890
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1790
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1822
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1831
msgid "Show Details"
msgstr "Mostrar detalles"
@ -432,23 +431,17 @@ msgstr "Configuración"
msgid "Change Background…"
msgstr "Cambiar el fondo…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#. */
#: ../js/ui/calendar.js:68
#: ../js/ui/calendar.js:67
msgctxt "event list time"
msgid "All Day"
msgstr "Todo el día"
#. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:75
#: ../js/ui/calendar.js:73
msgctxt "event list time"
msgid "%H%M"
msgstr "%H%M"
@ -456,7 +449,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */
#: ../js/ui/calendar.js:84
#: ../js/ui/calendar.js:82
msgctxt "event list time"
msgid "%l%M%p"
msgstr "%l%M%p"
@ -466,43 +459,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#. */
#: ../js/ui/calendar.js:115
#: ../js/ui/calendar.js:113
msgctxt "grid sunday"
msgid "S"
msgstr "D"
#. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:117
#: ../js/ui/calendar.js:115
msgctxt "grid monday"
msgid "M"
msgstr "L"
#. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:119
#: ../js/ui/calendar.js:117
msgctxt "grid tuesday"
msgid "T"
msgstr "M"
#. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:121
#: ../js/ui/calendar.js:119
msgctxt "grid wednesday"
msgid "W"
msgstr "X"
#. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:123
#: ../js/ui/calendar.js:121
msgctxt "grid thursday"
msgid "T"
msgstr "J"
#. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:125
#: ../js/ui/calendar.js:123
msgctxt "grid friday"
msgid "F"
msgstr "V"
#. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:127
#: ../js/ui/calendar.js:125
msgctxt "grid saturday"
msgid "S"
msgstr "S"
@ -513,83 +506,85 @@ msgstr "S"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#. */
#: ../js/ui/calendar.js:140
#: ../js/ui/calendar.js:138
msgctxt "list sunday"
msgid "Su"
msgstr "Dom"
#. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:142
#: ../js/ui/calendar.js:140
msgctxt "list monday"
msgid "M"
msgstr "L"
#. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:144
#: ../js/ui/calendar.js:142
msgctxt "list tuesday"
msgid "T"
msgstr "M"
#. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:146
#: ../js/ui/calendar.js:144
msgctxt "list wednesday"
msgid "W"
msgstr "X"
#. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:148
#: ../js/ui/calendar.js:146
msgctxt "list thursday"
msgid "Th"
msgstr "J"
#. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:150
#: ../js/ui/calendar.js:148
msgctxt "list friday"
msgid "F"
msgstr "V"
#. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:152
#: ../js/ui/calendar.js:150
msgctxt "list saturday"
msgid "S"
msgstr "S"
#: ../js/ui/calendar.js:461
#: ../js/ui/calendar.js:453
msgid "Previous month"
msgstr "Mes anterior"
#: ../js/ui/calendar.js:471
#: ../js/ui/calendar.js:463
msgid "Next month"
msgstr "Siguiente mes"
#. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:806
#: ../js/ui/calendar.js:781
msgid "Nothing Scheduled"
msgstr "Nada programado"
#: ../js/ui/calendar.js:825
#. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:799
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/calendar.js:829
#. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:802
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:841
#: ../js/ui/calendar.js:813
msgid "Today"
msgstr "Hoy"
#: ../js/ui/calendar.js:845
#: ../js/ui/calendar.js:817
msgid "Tomorrow"
msgstr "Mañana"
#: ../js/ui/calendar.js:856
#: ../js/ui/calendar.js:828
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:864
#: ../js/ui/calendar.js:836
msgid "Next week"
msgstr "La semana que viene"
@ -623,7 +618,7 @@ msgid "Type again:"
msgstr "Escriba de nuevo:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918
msgid "Connect"
msgstr "Conectar"
@ -717,102 +712,102 @@ msgstr "Autenticar"
msgid "Sorry, that didn't work. Please try again."
msgstr "Inténtelo de nuevo,"
#: ../js/ui/components/telepathyClient.js:242
#: ../js/ui/components/telepathyClient.js:240
msgid "Invitation"
msgstr "Invitación"
#: ../js/ui/components/telepathyClient.js:302
#: ../js/ui/components/telepathyClient.js:300
msgid "Call"
msgstr "Llamar"
#: ../js/ui/components/telepathyClient.js:318
#: ../js/ui/components/telepathyClient.js:316
msgid "File Transfer"
msgstr "Transferencia de archivos"
#: ../js/ui/components/telepathyClient.js:422
#: ../js/ui/components/telepathyClient.js:420
msgid "Chat"
msgstr "Chat"
#: ../js/ui/components/telepathyClient.js:485
#: ../js/ui/components/telepathyClient.js:483
msgid "Unmute"
msgstr "Dar voz"
#: ../js/ui/components/telepathyClient.js:485
#: ../js/ui/components/telepathyClient.js:483
msgid "Mute"
msgstr "Silenciar"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:955
#: ../js/ui/components/telepathyClient.js:953
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:962
#: ../js/ui/components/telepathyClient.js:960
msgid "Yesterday, %H%M"
msgstr "Ayer, %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:969
#: ../js/ui/components/telepathyClient.js:967
msgid "%A, %H%M"
msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:976
#: ../js/ui/components/telepathyClient.js:974
msgid "%B %d, %H%M"
msgstr "%d de %B, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:982
#: ../js/ui/components/telepathyClient.js:980
msgid "%B %d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:988
#: ../js/ui/components/telepathyClient.js:986
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:995
#: ../js/ui/components/telepathyClient.js:993
msgid "Yesterday, %l%M %p"
msgstr "Ayer a las %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1002
#: ../js/ui/components/telepathyClient.js:1000
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1009
#: ../js/ui/components/telepathyClient.js:1007
msgid "%B %d, %l%M %p"
msgstr "%d de %B, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1015
#: ../js/ui/components/telepathyClient.js:1013
msgid "%B %d %Y, %l%M %p"
msgstr "%d de %B de %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:1047
#: ../js/ui/components/telepathyClient.js:1045
#, javascript-format
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1151
#: ../js/ui/components/telepathyClient.js:1149
#, javascript-format
msgid "Invitation to %s"
msgstr "Invitación a %s"
@ -820,38 +815,38 @@ msgstr "Invitación a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1157
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1287
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1194
#: ../js/ui/components/telepathyClient.js:1228
#: ../js/ui/components/telepathyClient.js:1286
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1165
#: ../js/ui/components/telepathyClient.js:1234
#: ../js/ui/components/telepathyClient.js:1291
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1184
#, javascript-format
msgid "Video call from %s"
msgstr "Videollamada de %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1189
#: ../js/ui/components/telepathyClient.js:1187
#, javascript-format
msgid "Call from %s"
msgstr "Llamada de %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1201
msgid "Answer"
msgstr "Responder"
@ -860,112 +855,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1224
#: ../js/ui/components/telepathyClient.js:1222
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s le está enviando %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1253
#: ../js/ui/components/telepathyClient.js:1251
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cuándo está en línea"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1337
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1339
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1341
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1343
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1345
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1350
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1352
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1354
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1357
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1359
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1362
#: ../js/ui/components/telepathyClient.js:1361
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1364
#: ../js/ui/components/telepathyClient.js:1363
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1365
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1370
#: ../js/ui/components/telepathyClient.js:1369
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1372
#: ../js/ui/components/telepathyClient.js:1371
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
#: ../js/ui/components/telepathyClient.js:1374
#: ../js/ui/components/telepathyClient.js:1373
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1376
#: ../js/ui/components/telepathyClient.js:1375
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
#: ../js/ui/components/telepathyClient.js:1378
#: ../js/ui/components/telepathyClient.js:1377
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1380
#: ../js/ui/components/telepathyClient.js:1379
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1382
#: ../js/ui/components/telepathyClient.js:1381
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -974,22 +969,22 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/components/telepathyClient.js:1384
#: ../js/ui/components/telepathyClient.js:1383
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1394
#: ../js/ui/components/telepathyClient.js:1393
#, javascript-format
msgid "Unable to connect to %s"
msgstr "No se pudo conectar a %s"
#: ../js/ui/components/telepathyClient.js:1399
#: ../js/ui/components/telepathyClient.js:1398
msgid "View account"
msgstr "Ver cuenta"
#: ../js/ui/components/telepathyClient.js:1436
#: ../js/ui/components/telepathyClient.js:1435
msgid "Unknown reason"
msgstr "Razón desconocida"
@ -1005,22 +1000,22 @@ msgstr "Mostrar aplicaciones"
msgid "Dash"
msgstr "Tablero"
#: ../js/ui/dateMenu.js:99
#: ../js/ui/dateMenu.js:97
msgid "Open Calendar"
msgstr "Abrir calendario"
#: ../js/ui/dateMenu.js:103
#: ../js/ui/dateMenu.js:101
msgid "Open Clocks"
msgstr "Abrir Relojes"
#: ../js/ui/dateMenu.js:110
#: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings"
msgstr "Configuración de hora y fecha"
#. 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").
#. */
#: ../js/ui/dateMenu.js:134
#: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y"
@ -1164,7 +1159,7 @@ msgstr "Instalar"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:535
#: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:523
msgid "Keyboard"
msgstr "Teclado"
@ -1220,47 +1215,39 @@ msgstr "Ver fuente"
msgid "Web Page"
msgstr "Página web"
#: ../js/ui/messageTray.js:1332
#: ../js/ui/messageTray.js:1327
msgid "Open"
msgstr "Abrir"
#: ../js/ui/messageTray.js:1339
#: ../js/ui/messageTray.js:1334
msgid "Remove"
msgstr "Quitar"
#: ../js/ui/messageTray.js:1636
#: ../js/ui/messageTray.js:1631
msgid "Notifications"
msgstr "Notificaciones"
#: ../js/ui/messageTray.js:1643
#: ../js/ui/messageTray.js:1638
msgid "Clear Messages"
msgstr "Limpiar mensajes"
#: ../js/ui/messageTray.js:1662
#: ../js/ui/messageTray.js:1657
msgid "Notification Settings"
msgstr "Configuración de las notificaciones"
#: ../js/ui/messageTray.js:1715
#: ../js/ui/messageTray.js:1710
msgid "Tray Menu"
msgstr "Bandeja de menú"
#: ../js/ui/messageTray.js:1939
#: ../js/ui/messageTray.js:1934
msgid "No Messages"
msgstr "No hay mensajes"
#: ../js/ui/messageTray.js:1984
#: ../js/ui/messageTray.js:1979
msgid "Message Tray"
msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaje nuevo"
msgstr[1] "%d mensajes nuevos"
#: ../js/ui/messageTray.js:3011
#: ../js/ui/messageTray.js:2992
msgid "System Information"
msgstr "Información del sistema"
@ -1269,6 +1256,13 @@ msgctxt "program"
msgid "Unknown"
msgstr "Desconocido"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaje nuevo"
msgstr[1] "%d mensajes nuevos"
#: ../js/ui/overview.js:84
msgid "Undo"
msgstr "Deshacer"
@ -1321,26 +1315,26 @@ msgstr "Reiniciando…"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:154
#: ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificaciones nuevas"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:709
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME necesita bloquear la pantalla"
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
msgid "Unable to lock"
msgstr "No se pudo bloquear"
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
@ -1425,9 +1419,9 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:118
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:114
msgid "Turn Off"
msgstr "Apagar"
@ -1442,7 +1436,7 @@ msgid_plural "%d Connected Devices"
msgstr[0] "%d dispositivo conectado"
msgstr[1] "%d dispositivos conectados"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
msgid "Not Connected"
msgstr "No conectado"
@ -1450,7 +1444,7 @@ msgstr "No conectado"
msgid "Brightness"
msgstr "Brillo"
#: ../js/ui/status/keyboard.js:559
#: ../js/ui/status/keyboard.js:547
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
@ -1478,8 +1472,8 @@ msgstr "Activar"
msgid "<unknown>"
msgstr "<desconocido>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1512
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511
msgid "Off"
msgstr "Desconectado"
@ -1497,7 +1491,7 @@ msgstr "Sin gestionar"
msgid "Disconnecting"
msgstr "Desconectando"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
msgid "Connecting"
msgstr "Conectando"
@ -1518,7 +1512,7 @@ msgstr "Falta el «firmware»"
msgid "Unavailable"
msgstr "No disponible"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695
msgid "Connection failed"
msgstr "Falló la conexión"
@ -1530,7 +1524,7 @@ msgstr "Configuración de red cableada"
msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
msgid "Hardware Disabled"
msgstr "Hardware desactivado"
@ -1570,60 +1564,60 @@ msgstr "Redes Wi-Fi"
msgid "Select a network"
msgstr "Seleccionar una red"
#: ../js/ui/status/network.js:883
#: ../js/ui/status/network.js:882
msgid "No Networks"
msgstr "No hay redes"
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar"
#: ../js/ui/status/network.js:1174
#: ../js/ui/status/network.js:1173
msgid "Select Network"
msgstr "Seleccionar red"
#: ../js/ui/status/network.js:1180
#: ../js/ui/status/network.js:1179
msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi"
#: ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1281
msgid "Turn On"
msgstr "Encender"
#: ../js/ui/status/network.js:1299
#: ../js/ui/status/network.js:1298
msgid "Hotspot Active"
msgstr "Punto de acceso activo"
#: ../js/ui/status/network.js:1410
#: ../js/ui/status/network.js:1409
msgid "connecting..."
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1413
#: ../js/ui/status/network.js:1412
msgid "authentication required"
msgstr "se necesita autenticación"
#: ../js/ui/status/network.js:1415
#: ../js/ui/status/network.js:1414
msgid "connection failed"
msgstr "falló la conexión"
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89
msgid "Network Settings"
msgstr "Configuración de la red"
#: ../js/ui/status/network.js:1483
#: ../js/ui/status/network.js:1482
msgid "VPN Settings"
msgstr "Configuración de VPN"
#: ../js/ui/status/network.js:1502
#: ../js/ui/status/network.js:1501
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1657
#: ../js/ui/status/network.js:1656
msgid "Network Manager"
msgstr "Gestor de la red"
#: ../js/ui/status/network.js:1697
#: ../js/ui/status/network.js:1696
msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red"
@ -1657,11 +1651,11 @@ msgstr "SAI"
msgid "Battery"
msgstr "Batería"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode"
msgstr "Modo avión"
#: ../js/ui/status/rfkill.js:90
#: ../js/ui/status/rfkill.js:85
msgid "On"
msgstr "Encender"
@ -1841,9 +1835,6 @@ msgstr "La contraseña no puede estar vacía"
msgid "Authentication dialog was dismissed by the user"
msgstr "El usuario rechazó el diálogo de autenticación"
#~ msgid "Captive Portal"
#~ msgstr "Portal captivo"
#~ msgid "The maximum accuracy level of location."
#~ msgstr "El nivel máximo de precisión de la ubicación."

326
po/he.po
View File

@ -10,8 +10,8 @@ msgid ""
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-24 20:00+0200\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-13 23:32+0300\n"
"PO-Revision-Date: 2014-09-13 23:32+0300\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n"
@ -292,8 +292,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Delay focus changes in mouse mode until the pointer stops moving"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Network Login"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal"
msgstr "Captive Portal"
#: ../js/extensionPrefs/main.js:123
@ -307,7 +307,7 @@ msgstr "הרחבות GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915
msgid "Cancel"
msgstr "ביטול"
@ -325,20 +325,20 @@ msgctxt "button"
msgctxt "button"
msgid "Sign In"
msgstr "כניסה"
#: ../js/gdm/loginDialog.js:269
msgid "Choose Session"
msgstr "בחירת הפעלה"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#. manually entering the username.
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "לא רשום?"
#. 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
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
@ -346,16 +346,16 @@ msgstr "(משתמש או %s לדוגמה)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287
msgid "Username: "
msgstr "שם משתמש:"
#: ../js/gdm/loginDialog.js:922
msgid "Login Window"
msgstr "חלון כניסה"
#: ../js/gdm/util.js:323
msgid "Authentication error"
msgstr "שגיאת אימות"
@ -364,7 +364,7 @@ msgstr "שגיאת אימות"
#. not the main auth service. Instead we use the messages
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:453
msgid "(or swipe finger)"
msgstr "(או להעביר אצבע)"
@ -389,15 +389,15 @@ msgstr "ההרצה של „%s” נכשלה:"
#: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect"
msgstr "אימות ניתוב הרשת"
#: ../js/ui/appDisplay.js:772
msgid "Frequently used applications will appear here"
msgstr "יישומים בשימוש תדיר יופיעו כאן"
#: ../js/ui/appDisplay.js:883
msgid "Frequent"
msgstr "תדיר"
#: ../js/ui/appDisplay.js:890
msgid "All"
msgstr "הכול"
@ -417,12 +417,12 @@ msgstr "הוספה למועדפים"
#: ../js/ui/appDisplay.js:1830
msgid "Show Details"
msgstr "הצגת פרטים"
#: ../js/ui/appFavorites.js:124
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s נוסף למועדפים שלך."
#: ../js/ui/appFavorites.js:158
#, javascript-format
msgid "%s has been removed from your favorites."
@ -436,23 +436,17 @@ msgstr "הגדרות"
#: ../js/ui/backgroundMenu.js:21
msgid "Change Background…"
msgstr "החלפת הרקע…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "65"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#.
#.
#: ../js/ui/calendar.js:67
msgctxt "event list time"
msgid "All Day"
msgstr "יום שלם"
#. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to :
#. \u2236 is a ratio character, similar to :
#: ../js/ui/calendar.js:73
msgctxt "event list time"
msgid "%H%M"
@ -460,7 +454,7 @@ msgstr "%H:%M"
#. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space
#. a thin space
#: ../js/ui/calendar.js:82
msgctxt "event list time"
msgid "%l%M%p"
@ -470,43 +464,43 @@ msgstr "%l\\u2236%M%p"
#. *
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#.
#.
#: ../js/ui/calendar.js:113
msgctxt "grid sunday"
msgid "S"
msgstr "א"
#. Translators: Calendar grid abbreviation for Monday
#. Translators: Calendar grid abbreviation for Monday
#: ../js/ui/calendar.js:115
msgctxt "grid monday"
msgid "M"
msgstr "ב"
#. Translators: Calendar grid abbreviation for Tuesday
#. Translators: Calendar grid abbreviation for Tuesday
#: ../js/ui/calendar.js:117
msgctxt "grid tuesday"
msgid "T"
msgstr "ג"
#. Translators: Calendar grid abbreviation for Wednesday
#. Translators: Calendar grid abbreviation for Wednesday
#: ../js/ui/calendar.js:119
msgctxt "grid wednesday"
msgid "W"
msgstr "ד"
#. Translators: Calendar grid abbreviation for Thursday
#. Translators: Calendar grid abbreviation for Thursday
#: ../js/ui/calendar.js:121
msgctxt "grid thursday"
msgid "T"
msgstr "ה"
#. Translators: Calendar grid abbreviation for Friday
#. Translators: Calendar grid abbreviation for Friday
#: ../js/ui/calendar.js:123
msgctxt "grid friday"
msgid "F"
msgstr "ו"
#. Translators: Calendar grid abbreviation for Saturday
#. Translators: Calendar grid abbreviation for Saturday
#: ../js/ui/calendar.js:125
msgctxt "grid saturday"
msgid "S"
@ -517,83 +511,85 @@ msgstr "ש"
#. * NOTE: These list abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#.
#.
#: ../js/ui/calendar.js:138
msgctxt "list sunday"
msgid "Su"
msgstr "א׳"
#. Translators: Event list abbreviation for Monday
#. Translators: Event list abbreviation for Monday
#: ../js/ui/calendar.js:140
msgctxt "list monday"
msgid "M"
msgstr "ב׳"
#. Translators: Event list abbreviation for Tuesday
#. Translators: Event list abbreviation for Tuesday
#: ../js/ui/calendar.js:142
msgctxt "list tuesday"
msgid "T"
msgstr "ג׳"
#. Translators: Event list abbreviation for Wednesday
#. Translators: Event list abbreviation for Wednesday
#: ../js/ui/calendar.js:144
msgctxt "list wednesday"
msgid "W"
msgstr "ד׳"
#. Translators: Event list abbreviation for Thursday
#. Translators: Event list abbreviation for Thursday
#: ../js/ui/calendar.js:146
msgctxt "list thursday"
msgid "Th"
msgstr "ה"
#. Translators: Event list abbreviation for Friday
#. Translators: Event list abbreviation for Friday
#: ../js/ui/calendar.js:148
msgctxt "list friday"
msgid "F"
msgstr "ו׳"
#. Translators: Event list abbreviation for Saturday
#. Translators: Event list abbreviation for Saturday
#: ../js/ui/calendar.js:150
msgctxt "list saturday"
msgid "S"
msgstr "ש׳"
#: ../js/ui/calendar.js:453
msgid "Previous month"
msgstr "חודש קודם"
#: ../js/ui/calendar.js:463
msgid "Next month"
msgstr "חודש הבא"
#. Translators: Text to show if there are no events
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:781
msgid "Nothing Scheduled"
msgstr "היומן ריק"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:799
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, ה־%e ב%B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:802
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, ה־%e ב%B, %Y"
#: ../js/ui/calendar.js:813
msgid "Today"
msgstr "היום"
#: ../js/ui/calendar.js:817
msgid "Tomorrow"
msgstr "מחר"
#: ../js/ui/calendar.js:828
msgid "This week"
msgstr "השבוע"
#: ../js/ui/calendar.js:836
msgid "Next week"
msgstr "בשבוע הבא"
@ -627,7 +623,7 @@ msgid "Type again:"
msgid "Type again:"
msgstr "נא להקליד שוב:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918
msgid "Connect"
msgstr "התחברות"
@ -723,47 +719,47 @@ msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסל
msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה."
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#. system-users for now as Empathy does.
#: ../js/ui/components/telepathyClient.js:240
msgid "Invitation"
msgstr "הזמנה"
#. We got the TpContact
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:300
msgid "Call"
msgstr "התקשרות"
#. We got the TpContact
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:316
msgid "File Transfer"
msgstr "העברת קבצים"
#: ../js/ui/components/telepathyClient.js:420
msgid "Chat"
msgstr "שיחה"
#: ../js/ui/components/telepathyClient.js:483
msgid "Unmute"
msgstr "ביטול ההשתקה"
#: ../js/ui/components/telepathyClient.js:483
msgid "Mute"
msgstr "השתקה"
#. Translators: Time in 24h format
#. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:953
msgid "%H%M"
msgstr "%H:%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:960
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "אתמול, %H\\u2236%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#. string in 24h format. i.e. "Monday, 14:30"
#: ../js/ui/components/telepathyClient.js:967
#, no-c-format
msgid "%A, %H%M"
@ -771,7 +767,7 @@ msgstr "%A, %H:%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#. i.e. "May 25, 14:30"
#: ../js/ui/components/telepathyClient.js:974
#, no-c-format
msgid "%B %d, %H%M"
@ -779,26 +775,26 @@ msgstr "%d ב%B, %H:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#. i.e. "May 25 2012, 14:30"
#: ../js/ui/components/telepathyClient.js:980
#, no-c-format
msgid "%B %d %Y, %H%M"
msgstr "%d ב%B, %H:%M"
#. Translators: Time in 24h format
#. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:986
msgid "%l%M %p"
msgstr "%l:%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:993
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "אתמול, %l\\u2236%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1000
#, no-c-format
msgid "%A, %l%M %p"
@ -806,7 +802,7 @@ msgstr "%l:%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#. i.e. "May 25, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1007
#, no-c-format
msgid "%B %d, %l%M %p"
@ -814,21 +810,21 @@ msgstr "%d ב%B, %H:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#. i.e. "May 25 2012, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1013
#, no-c-format
msgid "%B %d %Y, %l%M %p"
msgstr "%d ב%B %Y, %l\\u2236%M %p"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#. IM name.
#: ../js/ui/components/telepathyClient.js:1045
#, javascript-format
msgid "%s is now known as %s"
msgstr "השם של %s הוחלף ל־%s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1149
#, javascript-format
msgid "Invitation to %s"
@ -836,38 +832,38 @@ msgstr "הזמנה ל־%s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#. * for example.
#: ../js/ui/components/telepathyClient.js:1157
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "הוזמנת על ידי %s להצטרף אל %s"
#: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1194
#: ../js/ui/components/telepathyClient.js:1228
#: ../js/ui/components/telepathyClient.js:1286
msgid "Decline"
msgstr "דחייה"
#: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1165
#: ../js/ui/components/telepathyClient.js:1234
#: ../js/ui/components/telepathyClient.js:1291
msgid "Accept"
msgstr "אישור"
#. translators: argument is a contact name like Alice for example.
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1184
#, javascript-format
msgid "Video call from %s"
msgstr "שיחת וידאו מאת %s"
#. translators: argument is a contact name like Alice for example.
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1187
#, javascript-format
msgid "Call from %s"
msgstr "שיחה מאת %s"
#. translators: this is a button label (verb), not a noun
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1201
msgid "Answer"
msgstr "מענה"
@ -876,108 +872,108 @@ msgstr "מענה"
#. * the contact's alias and the second one is the
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#.
#: ../js/ui/components/telepathyClient.js:1222
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s שולח/ת אליך %s"
#. To translators: The parameter is the contact's alias
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1251
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון"
#: ../js/ui/components/telepathyClient.js:1337
msgid "Network error"
msgstr "שגיאת רשת"
#: ../js/ui/components/telepathyClient.js:1339
msgid "Authentication failed"
msgstr "האימות נכשל"
#: ../js/ui/components/telepathyClient.js:1341
msgid "Encryption error"
msgstr "שגיאת הצפנה"
#: ../js/ui/components/telepathyClient.js:1343
msgid "Certificate not provided"
msgstr "לא סופק אישור"
#: ../js/ui/components/telepathyClient.js:1345
msgid "Certificate untrusted"
msgstr "האישור אינו מהימן"
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate expired"
msgstr "האישור פג"
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate not activated"
msgstr "האישור לא מופעל"
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate hostname mismatch"
msgstr "שם המארח באישור אינו תואם"
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate fingerprint mismatch"
msgstr "חוסר התאמה בטביעת האצבע של האישור"
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate self-signed"
msgstr "אישור בחתימה עצמית"
#: ../js/ui/components/telepathyClient.js:1357
msgid "Status is set to offline"
msgstr "המצב הוגדר ל'מנותק'"
#: ../js/ui/components/telepathyClient.js:1359
msgid "Encryption is not available"
msgstr "ההצפנה אינה זמינה"
#: ../js/ui/components/telepathyClient.js:1361
msgid "Certificate is invalid"
msgstr "האישור אינו תקף"
#: ../js/ui/components/telepathyClient.js:1363
msgid "Connection has been refused"
msgstr "ההתחברות נשללה"
#: ../js/ui/components/telepathyClient.js:1365
msgid "Connection can't be established"
msgstr "לא ניתן להפעיל את החיבור"
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been lost"
msgstr "החיבור אבד"
#: ../js/ui/components/telepathyClient.js:1369
msgid "This account is already connected to the server"
msgstr "חשבון זה כבר מחובר לשרת"
#: ../js/ui/components/telepathyClient.js:1371
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב"
#: ../js/ui/components/telepathyClient.js:1373
msgid "The account already exists on the server"
msgstr "החשבון כבר קיים בשרת"
#: ../js/ui/components/telepathyClient.js:1375
msgid "Server is currently too busy to handle the connection"
msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור"
#: ../js/ui/components/telepathyClient.js:1377
msgid "Certificate has been revoked"
msgstr "האישור נשלל"
#: ../js/ui/components/telepathyClient.js:1379
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה"
#: ../js/ui/components/telepathyClient.js:1381
msgid ""
"The length of the server certificate, or the depth of the server certificate "
@ -985,22 +981,22 @@ msgstr ""
msgstr ""
"אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי "
"ספריית ההצפנה"
#: ../js/ui/components/telepathyClient.js:1383
msgid "Internal error"
msgstr "שגיאה פנימית"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1393
#, javascript-format
msgid "Unable to connect to %s"
msgstr "לא ניתן להתחבר אל %s"
#: ../js/ui/components/telepathyClient.js:1398
msgid "View account"
msgstr "צפייה בחשבון"
#: ../js/ui/components/telepathyClient.js:1435
msgid "Unknown reason"
msgstr "סיבה לא ידועה"
@ -1018,22 +1014,22 @@ msgstr "הצגת יישומים"
#: ../js/ui/dash.js:445
msgid "Dash"
msgstr "חלונית"
#: ../js/ui/dateMenu.js:96
msgid "Open Calendar"
msgstr "פתיחת היומן"
#: ../js/ui/dateMenu.js:100
msgid "Open Clocks"
msgstr "פתיחת השעונים"
#: ../js/ui/dateMenu.js:107
msgid "Date & Time Settings"
msgstr "הגדרות תאריך ושעה"
#. 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").
#.
#.
#: ../js/ui/dateMenu.js:204
msgid "%A %B %e, %Y"
msgstr "%A ה־%e ב%B, %Y"
@ -1172,7 +1168,7 @@ msgstr "התקנה"
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
msgid "Keyboard"
msgstr "מקלדת"
@ -1228,48 +1224,39 @@ msgstr "צפייה במקור"
#: ../js/ui/lookingGlass.js:758
msgid "Web Page"
msgstr "דף אינטרנט"
#: ../js/ui/messageTray.js:1326
msgid "Open"
msgstr "פתיחה"
#: ../js/ui/messageTray.js:1333
msgid "Remove"
msgstr "הסרה"
#: ../js/ui/messageTray.js:1630
msgid "Notifications"
msgstr "התרעות"
#: ../js/ui/messageTray.js:1637
msgid "Clear Messages"
msgstr "פינוי ההודעות"
#: ../js/ui/messageTray.js:1656
msgid "Notification Settings"
msgstr "הגדרות התרעה"
#: ../js/ui/messageTray.js:1709
msgid "Tray Menu"
msgstr "תפריט מגש"
#: ../js/ui/messageTray.js:1926
msgid "No Messages"
msgstr "אין הודעות"
#: ../js/ui/messageTray.js:1968
msgid "Message Tray"
msgstr "אזור דיווח ההודעות"
# javascript-format
#: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "הודעה חדשה אחת"
msgstr[1] "%d הודעות חדשות"
#: ../js/ui/messageTray.js:2971
msgid "System Information"
msgstr "פרטי המערכת"
@ -1278,6 +1265,14 @@ msgctxt "program"
msgctxt "program"
msgid "Unknown"
msgstr "לא ידוע"
# javascript-format
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "הודעה חדשה אחת"
msgstr[1] "%d הודעות חדשות"
#: ../js/ui/overview.js:84
msgid "Undo"
@ -1336,18 +1331,18 @@ msgid "%A, %B %d"
msgid "%A, %B %d"
msgstr "%A, ה־%d ב%B"
# javascript-format
# javascript-format
#: ../js/ui/screenShield.js:153
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "התרעה חדשה אחת"
msgstr[1] "%d התרעות חדשות"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345
msgid "Lock"
msgstr "נעילה"
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "על GNOME לנעול את המסך"
@ -1358,19 +1353,19 @@ msgstr "על GNOME לנעול את המסך"
#. Just tell him to stop using this app
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
msgid "Unable to lock"
msgstr "לא ניתן לנעול"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305
msgid "Lock was blocked by an application"
msgstr "הנעילה נחסמה ע״י היישום"
#: ../js/ui/search.js:594
msgid "Searching…"
msgstr "בחיפוש…"
#: ../js/ui/search.js:596
msgid "No results."
msgstr "אין תוצאות."
@ -1449,9 +1444,9 @@ msgid "Bluetooth"
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:114
msgid "Turn Off"
msgstr "כיבוי"
@ -1467,7 +1462,7 @@ msgid_plural "%d Connected Devices"
msgid_plural "%d Connected Devices"
msgstr[0] "התקן אחד מחובר"
msgstr[1] "%d התקנים מחוברים"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
msgid "Not Connected"
msgstr "לא מחובר"
@ -1475,7 +1470,7 @@ msgstr "לא מחובר"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "בהירות"
#: ../js/ui/status/keyboard.js:547
msgid "Show Keyboard Layout"
msgstr "הצגת פריסת המקלדת"
@ -1503,8 +1498,8 @@ msgstr "אפשור"
#: ../js/ui/status/network.js:101
msgid "<unknown>"
msgstr "<לא ידוע>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511
msgid "Off"
msgstr "כבוי"
@ -1522,7 +1517,7 @@ msgstr "לא מנוהל"
#: ../js/ui/status/network.js:465
msgid "Disconnecting"
msgstr "בהליכי ניתוק"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
msgid "Connecting"
msgstr "בהתחברות"
@ -1543,7 +1538,7 @@ msgstr "הקושחה חסרה"
#: ../js/ui/status/network.js:486
msgid "Unavailable"
msgstr "לא זמין"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695
msgid "Connection failed"
msgstr "ההתחברות נכשלה"
@ -1555,7 +1550,7 @@ msgstr "הגדרות רשת קווית"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
msgid "Mobile Broadband Settings"
msgstr "הגדרות פס־רחב נייד"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
msgid "Hardware Disabled"
msgstr "מנוטרל חומרתית"
@ -1595,60 +1590,60 @@ msgstr "רשתות אלחוטיות"
#: ../js/ui/status/network.js:853
msgid "Select a network"
msgstr "בחירת רשת"
#: ../js/ui/status/network.js:882
msgid "No Networks"
msgstr "אין רשתות"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off"
msgstr "שימוש במתג של החומרה לכיבוי"
#: ../js/ui/status/network.js:1173
msgid "Select Network"
msgstr "בחירת רשת"
#: ../js/ui/status/network.js:1179
msgid "Wi-Fi Settings"
msgstr "הגדרות רשת אלחוטית"
#: ../js/ui/status/network.js:1281
msgid "Turn On"
msgstr "הפעלה"
#: ../js/ui/status/network.js:1298
msgid "Hotspot Active"
msgstr "נקודה חמה פעילה"
#: ../js/ui/status/network.js:1409
msgid "connecting..."
msgstr "בהתחברות..."
#. Translators: this is for network connections that require some kind of key or password
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:1412
msgid "authentication required"
msgstr "נדרש אימות"
#: ../js/ui/status/network.js:1414
msgid "connection failed"
msgstr "ההתחברות נכשלה"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89
msgid "Network Settings"
msgstr "הגדרות הרשת"
#: ../js/ui/status/network.js:1482
msgid "VPN Settings"
msgstr "הגדרות VPN"
#: ../js/ui/status/network.js:1501
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1656
msgid "Network Manager"
msgstr "מנהל הרשתות"
#: ../js/ui/status/network.js:1696
msgid "Activation of network connection failed"
msgstr "הפעלת חיבור הרשת נכשלה"
@ -1689,11 +1684,11 @@ msgstr "סוללה"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
#. changing the menu contents.
#. changing the menu contents.
#: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode"
msgstr "מצב טיסה"
#: ../js/ui/status/rfkill.js:85
msgid "On"
msgstr "פועל"
@ -1872,9 +1867,6 @@ msgstr "הססמה לא יכולה להישאר ריקה"
#: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user"
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "Captive Portal"
#~ msgstr "Captive Portal"
#~ msgid "The maximum accuracy level of location."
#~ msgstr "The maximum accuracy level of location."

View File

@ -19,7 +19,7 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-13 07:37+0000\n"
"PO-Revision-Date: 2014-11-16 03:54+0900\n"
"PO-Revision-Date: 2014-09-18 01:41+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"Language: Korean\n"
@ -1444,7 +1444,7 @@ msgstr "<알 수 없음>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511
msgid "Off"
msgstr ""
msgstr "끄기"
#: ../js/ui/status/network.js:459
msgid "Connected"
@ -1626,7 +1626,7 @@ msgstr "비행기 모드"
#: ../js/ui/status/rfkill.js:85
msgid "On"
msgstr ""
msgstr "켜기"
#: ../js/ui/status/system.js:317
msgid "Switch User"

327
po/nb.po
View File

@ -7,10 +7,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.15.x\n"
"Project-Id-Version: gnome-shell 3.13.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-16 12:28+0100\n"
"PO-Revision-Date: 2014-11-16 12:29+0100\n"
"POT-Creation-Date: 2014-09-27 15:31+0200\n"
"PO-Revision-Date: 2014-09-27 15:33+0200\n"
"Last-Translator: Åka Sikrom <a4NOSPAMPLEASETHANKYOU@hush.com>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: Norwegian bokmål\n"
@ -294,8 +294,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Utsett fokusendringer i musmodus til peker slutter å bevege seg"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Network Login"
msgstr "Nettverkspålogging"
msgid "Captive Portal"
msgstr "Fanget portal"
#: ../js/extensionPrefs/main.js:123
#, javascript-format
@ -309,7 +309,7 @@ msgstr "Utvidelser for GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:916
#: ../js/ui/status/network.js:915
msgid "Cancel"
msgstr "Avbryt"
@ -327,20 +327,20 @@ msgctxt "button"
msgid "Sign In"
msgstr "Logg inn"
#: ../js/gdm/loginDialog.js:275
#: ../js/gdm/loginDialog.js:269
msgid "Choose Session"
msgstr "Velg økt"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:434
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "Ikke listet?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:619
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(f.eks. bruker eller %s)"
@ -348,16 +348,16 @@ msgstr "(f.eks. bruker eller %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287
msgid "Username: "
msgstr "Brukernavn: "
#: ../js/gdm/loginDialog.js:953
#: ../js/gdm/loginDialog.js:922
msgid "Login Window"
msgstr "Innloggingsvindu"
#: ../js/gdm/util.js:341
#: ../js/gdm/util.js:323
msgid "Authentication error"
msgstr "Autentiseringsfeil"
@ -366,7 +366,7 @@ msgstr "Autentiseringsfeil"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:473
#: ../js/gdm/util.js:453
msgid "(or swipe finger)"
msgstr "(eller dra finger)"
@ -391,31 +391,31 @@ msgstr "Kjøring av «%s» mislyktes:"
msgid "Web Authentication Redirect"
msgstr "Omdirigering av autentisering på nett"
#: ../js/ui/appDisplay.js:770
#: ../js/ui/appDisplay.js:772
msgid "Frequently used applications will appear here"
msgstr "Ofte brukte programmer vil vises her"
#: ../js/ui/appDisplay.js:881
#: ../js/ui/appDisplay.js:883
msgid "Frequent"
msgstr "Ofte"
#: ../js/ui/appDisplay.js:888
#: ../js/ui/appDisplay.js:890
msgid "All"
msgstr "Alle"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1790
msgid "New Window"
msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1822
msgid "Add to Favorites"
msgstr "Legg til i favoritter"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1831
msgid "Show Details"
msgstr "Vis detaljer"
@ -438,23 +438,17 @@ msgstr "Innstillinger"
msgid "Change Background…"
msgstr "Bytt bakgrunn …"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#.
#: ../js/ui/calendar.js:68
#: ../js/ui/calendar.js:67
msgctxt "event list time"
msgid "All Day"
msgstr "Hele dagen"
#. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to :
#: ../js/ui/calendar.js:75
#: ../js/ui/calendar.js:73
msgctxt "event list time"
msgid "%H%M"
msgstr "%H.%M"
@ -462,7 +456,7 @@ msgstr "%H.%M"
#. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space
#: ../js/ui/calendar.js:84
#: ../js/ui/calendar.js:82
msgctxt "event list time"
msgid "%l%M%p"
msgstr "%H.%M"
@ -472,43 +466,43 @@ msgstr "%H.%M"
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#.
#: ../js/ui/calendar.js:115
#: ../js/ui/calendar.js:113
msgctxt "grid sunday"
msgid "S"
msgstr "S"
#. Translators: Calendar grid abbreviation for Monday
#: ../js/ui/calendar.js:117
#: ../js/ui/calendar.js:115
msgctxt "grid monday"
msgid "M"
msgstr "M"
#. Translators: Calendar grid abbreviation for Tuesday
#: ../js/ui/calendar.js:119
#: ../js/ui/calendar.js:117
msgctxt "grid tuesday"
msgid "T"
msgstr "T"
#. Translators: Calendar grid abbreviation for Wednesday
#: ../js/ui/calendar.js:121
#: ../js/ui/calendar.js:119
msgctxt "grid wednesday"
msgid "W"
msgstr "O"
#. Translators: Calendar grid abbreviation for Thursday
#: ../js/ui/calendar.js:123
#: ../js/ui/calendar.js:121
msgctxt "grid thursday"
msgid "T"
msgstr "T"
#. Translators: Calendar grid abbreviation for Friday
#: ../js/ui/calendar.js:125
#: ../js/ui/calendar.js:123
msgctxt "grid friday"
msgid "F"
msgstr "F"
#. Translators: Calendar grid abbreviation for Saturday
#: ../js/ui/calendar.js:127
#: ../js/ui/calendar.js:125
msgctxt "grid saturday"
msgid "S"
msgstr "L"
@ -519,83 +513,85 @@ msgstr "L"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#.
#: ../js/ui/calendar.js:140
#: ../js/ui/calendar.js:138
msgctxt "list sunday"
msgid "Su"
msgstr "Sø"
#. Translators: Event list abbreviation for Monday
#: ../js/ui/calendar.js:142
#: ../js/ui/calendar.js:140
msgctxt "list monday"
msgid "M"
msgstr "Ma"
#. Translators: Event list abbreviation for Tuesday
#: ../js/ui/calendar.js:144
#: ../js/ui/calendar.js:142
msgctxt "list tuesday"
msgid "T"
msgstr "Ti"
#. Translators: Event list abbreviation for Wednesday
#: ../js/ui/calendar.js:146
#: ../js/ui/calendar.js:144
msgctxt "list wednesday"
msgid "W"
msgstr "On"
#. Translators: Event list abbreviation for Thursday
#: ../js/ui/calendar.js:148
#: ../js/ui/calendar.js:146
msgctxt "list thursday"
msgid "Th"
msgstr "To"
#. Translators: Event list abbreviation for Friday
#: ../js/ui/calendar.js:150
#: ../js/ui/calendar.js:148
msgctxt "list friday"
msgid "F"
msgstr "Fr"
#. Translators: Event list abbreviation for Saturday
#: ../js/ui/calendar.js:152
#: ../js/ui/calendar.js:150
msgctxt "list saturday"
msgid "S"
msgstr "Lø"
#: ../js/ui/calendar.js:461
#: ../js/ui/calendar.js:453
msgid "Previous month"
msgstr "Forrige måned"
#: ../js/ui/calendar.js:471
#: ../js/ui/calendar.js:463
msgid "Next month"
msgstr "Neste måned"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:806
#: ../js/ui/calendar.js:781
msgid "Nothing Scheduled"
msgstr "Ingenting planlagt"
#: ../js/ui/calendar.js:825
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:799
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A %B %d"
#: ../js/ui/calendar.js:829
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:802
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A %B %d, %Y"
#: ../js/ui/calendar.js:841
#: ../js/ui/calendar.js:813
msgid "Today"
msgstr "I dag"
#: ../js/ui/calendar.js:845
#: ../js/ui/calendar.js:817
msgid "Tomorrow"
msgstr "I morgen"
#: ../js/ui/calendar.js:856
#: ../js/ui/calendar.js:828
msgid "This week"
msgstr "Denne uka"
#: ../js/ui/calendar.js:864
#: ../js/ui/calendar.js:836
msgid "Next week"
msgstr "Neste uke"
@ -629,7 +625,7 @@ msgid "Type again:"
msgstr "Skriv på nytt:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918
msgid "Connect"
msgstr "Koble til"
@ -727,47 +723,47 @@ msgstr "Beklager, det virket ikke. Prøv igjen."
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/components/telepathyClient.js:242
#: ../js/ui/components/telepathyClient.js:240
msgid "Invitation"
msgstr "Invitasjon"
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:302
#: ../js/ui/components/telepathyClient.js:300
msgid "Call"
msgstr "Ring"
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:318
#: ../js/ui/components/telepathyClient.js:316
msgid "File Transfer"
msgstr "Filoverføring"
#: ../js/ui/components/telepathyClient.js:422
#: ../js/ui/components/telepathyClient.js:420
msgid "Chat"
msgstr "Prat"
#: ../js/ui/components/telepathyClient.js:485
#: ../js/ui/components/telepathyClient.js:483
msgid "Unmute"
msgstr "Fjern demping"
#: ../js/ui/components/telepathyClient.js:485
#: ../js/ui/components/telepathyClient.js:483
msgid "Mute"
msgstr "Demp"
#. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:955
#: ../js/ui/components/telepathyClient.js:953
msgid "%H%M"
msgstr "%H.%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:962
#: ../js/ui/components/telepathyClient.js:960
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "I går, %H.%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: ../js/ui/components/telepathyClient.js:969
#: ../js/ui/components/telepathyClient.js:967
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H.%M"
@ -775,7 +771,7 @@ msgstr "%A, %H.%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: ../js/ui/components/telepathyClient.js:976
#: ../js/ui/components/telepathyClient.js:974
#, no-c-format
msgid "%B %d, %H%M"
msgstr "%d %B, %H.%M"
@ -783,26 +779,26 @@ msgstr "%d %B, %H.%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: ../js/ui/components/telepathyClient.js:982
#: ../js/ui/components/telepathyClient.js:980
#, no-c-format
msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H.%M"
#. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:988
#: ../js/ui/components/telepathyClient.js:986
msgid "%l%M %p"
msgstr "%H.%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:995
#: ../js/ui/components/telepathyClient.js:993
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "I går, %H.%M"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1002
#: ../js/ui/components/telepathyClient.js:1000
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %H.%M"
@ -810,7 +806,7 @@ msgstr "%A, %H.%M"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1009
#: ../js/ui/components/telepathyClient.js:1007
#, no-c-format
msgid "%B %d, %l%M %p"
msgstr "%d %B, %H.%M"
@ -818,21 +814,21 @@ msgstr "%d %B, %H.%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1015
#: ../js/ui/components/telepathyClient.js:1013
#, no-c-format
msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %H.%M"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:1047
#: ../js/ui/components/telepathyClient.js:1045
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1151
#: ../js/ui/components/telepathyClient.js:1149
#, javascript-format
msgid "Invitation to %s"
msgstr "Invitasjon til %s"
@ -840,38 +836,38 @@ msgstr "Invitasjon til %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1157
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s inviterer deg til å bli med i %s"
#: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1287
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1194
#: ../js/ui/components/telepathyClient.js:1228
#: ../js/ui/components/telepathyClient.js:1286
msgid "Decline"
msgstr "Avslå"
#: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1165
#: ../js/ui/components/telepathyClient.js:1234
#: ../js/ui/components/telepathyClient.js:1291
msgid "Accept"
msgstr "Godta"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1184
#, javascript-format
msgid "Video call from %s"
msgstr "Videosamtale fra %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1189
#: ../js/ui/components/telepathyClient.js:1187
#, javascript-format
msgid "Call from %s"
msgstr "Samtale fra %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1201
msgid "Answer"
msgstr "Svar"
@ -880,110 +876,110 @@ msgstr "Svar"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1224
#: ../js/ui/components/telepathyClient.js:1222
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s sender deg %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1253
#: ../js/ui/components/telepathyClient.js:1251
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1337
msgid "Network error"
msgstr "Nettverksfeil"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1339
msgid "Authentication failed"
msgstr "Autentisering mislyktes"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1341
msgid "Encryption error"
msgstr "Feil ved kryptering"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1343
msgid "Certificate not provided"
msgstr "Sertifikat ikke oppgitt"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1345
msgid "Certificate untrusted"
msgstr "Stoler ikke på sertifikatet"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate expired"
msgstr "Sertifikatet er utløpt"
#: ../js/ui/components/telepathyClient.js:1350
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate not activated"
msgstr "Sertifikatet er ikke aktivert"
#: ../js/ui/components/telepathyClient.js:1352
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate hostname mismatch"
msgstr "Feil vertsnavn for sertifikat"
#: ../js/ui/components/telepathyClient.js:1354
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate fingerprint mismatch"
msgstr "Feil fingeravtrykk for sertifikat"
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate self-signed"
msgstr "Sertifikatet er selvsignert"
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1357
msgid "Status is set to offline"
msgstr "Status er satt til frakoblet"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1359
msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgjengelig"
#: ../js/ui/components/telepathyClient.js:1362
#: ../js/ui/components/telepathyClient.js:1361
msgid "Certificate is invalid"
msgstr "Sertifikatet er ugyldig"
#: ../js/ui/components/telepathyClient.js:1364
#: ../js/ui/components/telepathyClient.js:1363
msgid "Connection has been refused"
msgstr "Tilkobling ble nektet"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1365
msgid "Connection can't be established"
msgstr "Klarte ikke å etablere tilkobling"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been lost"
msgstr "Tilkoblingen er brutt"
#: ../js/ui/components/telepathyClient.js:1370
#: ../js/ui/components/telepathyClient.js:1369
msgid "This account is already connected to the server"
msgstr "Denne kontoen er allerede koblet til tjeneren"
#: ../js/ui/components/telepathyClient.js:1372
#: ../js/ui/components/telepathyClient.js:1371
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
#: ../js/ui/components/telepathyClient.js:1374
#: ../js/ui/components/telepathyClient.js:1373
msgid "The account already exists on the server"
msgstr "Kontoen eksisterer allerede på tjeneren"
#: ../js/ui/components/telepathyClient.js:1376
#: ../js/ui/components/telepathyClient.js:1375
msgid "Server is currently too busy to handle the connection"
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
#: ../js/ui/components/telepathyClient.js:1378
#: ../js/ui/components/telepathyClient.js:1377
msgid "Certificate has been revoked"
msgstr "Sertifikatet er tilbaketrukket"
#: ../js/ui/components/telepathyClient.js:1380
#: ../js/ui/components/telepathyClient.js:1379
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
#: ../js/ui/components/telepathyClient.js:1382
#: ../js/ui/components/telepathyClient.js:1381
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -991,22 +987,22 @@ msgstr ""
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
"kryptografibiblioteket"
#: ../js/ui/components/telepathyClient.js:1384
#: ../js/ui/components/telepathyClient.js:1383
msgid "Internal error"
msgstr "Intern feil"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1394
#: ../js/ui/components/telepathyClient.js:1393
#, javascript-format
msgid "Unable to connect to %s"
msgstr "Klarte ikke å koble til %s"
#: ../js/ui/components/telepathyClient.js:1399
#: ../js/ui/components/telepathyClient.js:1398
msgid "View account"
msgstr "Vis konto"
#: ../js/ui/components/telepathyClient.js:1436
#: ../js/ui/components/telepathyClient.js:1435
msgid "Unknown reason"
msgstr "Ukjent årsak"
@ -1024,22 +1020,22 @@ msgstr "Vis programmer"
msgid "Dash"
msgstr "Favoritter"
#: ../js/ui/dateMenu.js:97
#: ../js/ui/dateMenu.js:96
msgid "Open Calendar"
msgstr "Åpne kalender"
#: ../js/ui/dateMenu.js:101
#: ../js/ui/dateMenu.js:100
msgid "Open Clocks"
msgstr "Åpne Klokker"
#: ../js/ui/dateMenu.js:108
#: ../js/ui/dateMenu.js:107
msgid "Date & Time Settings"
msgstr "Innstillinger for dato og klokkeslett"
#. 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").
#.
#: ../js/ui/dateMenu.js:132
#: ../js/ui/dateMenu.js:204
msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y"
@ -1184,7 +1180,7 @@ msgstr "Installer"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
#: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
#: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:523
msgid "Keyboard"
msgstr "Tastatur"
@ -1240,47 +1236,39 @@ msgstr "Vis kildekode"
msgid "Web Page"
msgstr "Nettside"
#: ../js/ui/messageTray.js:1332
#: ../js/ui/messageTray.js:1327
msgid "Open"
msgstr "Åpne"
#: ../js/ui/messageTray.js:1339
#: ../js/ui/messageTray.js:1334
msgid "Remove"
msgstr "Fjern"
#: ../js/ui/messageTray.js:1636
#: ../js/ui/messageTray.js:1631
msgid "Notifications"
msgstr "Varslinger"
#: ../js/ui/messageTray.js:1643
#: ../js/ui/messageTray.js:1638
msgid "Clear Messages"
msgstr "Tøm meldinger"
#: ../js/ui/messageTray.js:1662
#: ../js/ui/messageTray.js:1657
msgid "Notification Settings"
msgstr "Innstillinger for varsling"
#: ../js/ui/messageTray.js:1715
#: ../js/ui/messageTray.js:1710
msgid "Tray Menu"
msgstr "Meny for varslingsområde"
#: ../js/ui/messageTray.js:1939
#: ../js/ui/messageTray.js:1934
msgid "No Messages"
msgstr "Ingen meldinger"
#: ../js/ui/messageTray.js:1984
#: ../js/ui/messageTray.js:1979
msgid "Message Tray"
msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d ny melding"
msgstr[1] "%d nye meldinger"
#: ../js/ui/messageTray.js:3011
#: ../js/ui/messageTray.js:2992
msgid "System Information"
msgstr "Systeminformasjon"
@ -1289,6 +1277,13 @@ msgctxt "program"
msgid "Unknown"
msgstr "Ukjent"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d ny melding"
msgstr[1] "%d nye meldinger"
#: ../js/ui/overview.js:84
msgid "Undo"
msgstr "Angre"
@ -1346,18 +1341,18 @@ msgstr "Starter på nytt …"
msgid "%A, %B %d"
msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:154
#: ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d ny varsling"
msgstr[1] "%d nye varslinger"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345
msgid "Lock"
msgstr "Lås"
#: ../js/ui/screenShield.js:709
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME må låse skjermen"
@ -1368,19 +1363,19 @@ msgstr "GNOME må låse skjermen"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
msgid "Unable to lock"
msgstr "Klarte ikke å låse"
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305
msgid "Lock was blocked by an application"
msgstr "Låsing ble stoppet av et program"
#: ../js/ui/search.js:611
#: ../js/ui/search.js:594
msgid "Searching…"
msgstr "Søker …"
#: ../js/ui/search.js:613
#: ../js/ui/search.js:596
msgid "No results."
msgstr "Ingen resultater."
@ -1459,9 +1454,9 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:118
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:114
msgid "Turn Off"
msgstr "Slå av"
@ -1476,7 +1471,7 @@ msgid_plural "%d Connected Devices"
msgstr[0] "%d tilkoblet enhet"
msgstr[1] "%d tilkoblede enheter"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
msgid "Not Connected"
msgstr "Ikke koblet til"
@ -1484,7 +1479,7 @@ msgstr "Ikke koblet til"
msgid "Brightness"
msgstr "Lysstyrke"
#: ../js/ui/status/keyboard.js:563
#: ../js/ui/status/keyboard.js:547
msgid "Show Keyboard Layout"
msgstr "Vis tastaturutforming"
@ -1512,8 +1507,8 @@ msgstr "Slå på"
msgid "<unknown>"
msgstr "<ukjent>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1512
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511
msgid "Off"
msgstr "Av"
@ -1531,7 +1526,7 @@ msgstr "Håndteres ikke"
msgid "Disconnecting"
msgstr "Kobler fra"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
msgid "Connecting"
msgstr "Kobler til"
@ -1552,7 +1547,7 @@ msgstr "Fastvare mangler"
msgid "Unavailable"
msgstr "Ikke tilgjengelig"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695
msgid "Connection failed"
msgstr "Tilkobling mislyktes"
@ -1564,7 +1559,7 @@ msgstr "Innstillinger for trådbundet nettverk"
msgid "Mobile Broadband Settings"
msgstr "Innstillinger for mobilt bredbånd"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
msgid "Hardware Disabled"
msgstr "Maskinvare slått av"
@ -1604,60 +1599,60 @@ msgstr "Wi-Fi nettverk"
msgid "Select a network"
msgstr "Velg et nettverk"
#: ../js/ui/status/network.js:883
#: ../js/ui/status/network.js:882
msgid "No Networks"
msgstr "Ingen nettverk"
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off"
msgstr "Bruk maskinvarebryter til å slå av"
#: ../js/ui/status/network.js:1174
#: ../js/ui/status/network.js:1173
msgid "Select Network"
msgstr "Velg nettverk"
#: ../js/ui/status/network.js:1180
#: ../js/ui/status/network.js:1179
msgid "Wi-Fi Settings"
msgstr "Innstillinger"
#: ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1281
msgid "Turn On"
msgstr "Slå på"
#: ../js/ui/status/network.js:1299
#: ../js/ui/status/network.js:1298
msgid "Hotspot Active"
msgstr "Trådløst aksesspunkt aktivt"
#: ../js/ui/status/network.js:1410
#: ../js/ui/status/network.js:1409
msgid "connecting..."
msgstr "kobler til …"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:1413
#: ../js/ui/status/network.js:1412
msgid "authentication required"
msgstr "autentisering kreves"
#: ../js/ui/status/network.js:1415
#: ../js/ui/status/network.js:1414
msgid "connection failed"
msgstr "tilkobling mislyktes"
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89
msgid "Network Settings"
msgstr "Innstillinger for nettverk"
#: ../js/ui/status/network.js:1483
#: ../js/ui/status/network.js:1482
msgid "VPN Settings"
msgstr "Innstillinger for VPN"
#: ../js/ui/status/network.js:1502
#: ../js/ui/status/network.js:1501
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1657
#: ../js/ui/status/network.js:1656
msgid "Network Manager"
msgstr "Nettverkshåndtering"
#: ../js/ui/status/network.js:1697
#: ../js/ui/status/network.js:1696
msgid "Activation of network connection failed"
msgstr "Aktivering av nettverkstilkobling mislyktes"
@ -1698,11 +1693,11 @@ msgstr "Batteri"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
#. changing the menu contents.
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode"
msgstr "Flymodus"
#: ../js/ui/status/rfkill.js:90
#: ../js/ui/status/rfkill.js:85
msgid "On"
msgstr "På"

File diff suppressed because it is too large Load Diff

2114
po/vi.po

File diff suppressed because it is too large Load Diff

View File

@ -51,13 +51,6 @@ gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
gnome-shell-perf-tool: gnome-shell-perf-tool.in Makefile
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
org-gtk-application.c org-gtk-application.h: org.gtk.Application.xml Makefile
$(AM_V_GEN) $(GDBUS_CODEGEN) \
--generate-c-code org-gtk-application \
--c-namespace Shell \
$<
EXTRA_DIST += org.gtk.Application.xml
CLEANFILES += gnome-shell $(bin_SCRIPTS)
include Makefile-st.am
@ -82,8 +75,6 @@ privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell
noinst_LTLIBRARIES += libgnome-shell-base.la
shell_built_sources = \
org-gtk-application.h \
org-gtk-application.c \
shell-enum-types.h \
shell-enum-types.c
@ -187,12 +178,8 @@ libgnome_shell_built_sources = \
libgnome_shell_la_SOURCES = $(libgnome_shell_sources)
nodist_libgnome_shell_la_SOURCES = $(libgnome_shell_built_sources)
shell_no_gir_sources = \
org-gtk-application.h \
org-gtk-application.c
libgnome_shell_la_gir_sources = \
$(filter-out %-private.h $(shell_private_sources) $(shell_no_gir_sources), $(shell_public_headers_h) $(libgnome_shell_base_la_SOURCES) $(libgnome_shell_sources) $(libgnome_shell_built_sources))
$(filter-out %-private.h $(shell_private_sources), $(shell_public_headers_h) $(libgnome_shell_base_la_SOURCES) $(libgnome_shell_sources) $(libgnome_shell_built_sources))
gnome_shell_SOURCES = main.c
gnome_shell_CPPFLAGS = \

View File

@ -176,18 +176,54 @@ static void
calendar_sources_init (CalendarSources *sources)
{
GError *error = NULL;
GDBusConnection *session_bus;
GVariant *result;
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
/* XXX Not sure what to do if this fails.
* Should this class implement GInitable or pass the
* registry in as a G_PARAM_CONSTRUCT_ONLY property? */
sources->priv->registry = e_source_registry_new_sync (NULL, &error);
/* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
(and other library calls that eventually call g_dbus_proxy_new[_sync]())
is 25 seconds. This has been shown to be too small for
evolution-source-registry in certain cases (slow disk, concurrent IO,
many configured sources), so we first ensure that the service
starts with a manual call and a higher timeout.
HACK: every time the DBus API is bumped in e-d-s we need
to update this!
*/
session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
if (session_bus == NULL)
{
g_error ("Failed to connect to the session bus: %s", error->message);
}
result = g_dbus_connection_call_sync (session_bus, "org.freedesktop.DBus",
"/", "org.freedesktop.DBus",
"StartServiceByName",
g_variant_new ("(su)",
"org.gnome.evolution.dataserver.Sources3",
0),
NULL,
G_DBUS_CALL_FLAGS_NONE,
60 * 1000,
NULL, &error);
if (result != NULL)
{
g_variant_unref (result);
sources->priv->registry = e_source_registry_new_sync (NULL, &error);
}
if (error != NULL)
{
g_error ("%s: %s", G_STRFUNC, error->message);
/* Any error is fatal, but we don't want to crash gnome-shell-calendar-server
because of e-d-s problems. So just exit here.
*/
g_warning ("Failed to start evolution-source-registry: %s", error->message);
exit(EXIT_FAILURE);
}
g_object_unref (session_bus);
sources->priv->source_added_id = g_signal_connect (sources->priv->registry,
"source-added",
G_CALLBACK (calendar_sources_registry_source_changed_cb),

View File

@ -14,7 +14,7 @@ except ImportError:
try:
import simplejson as json
except ImportError:
print('The Python simplejson module is required')
print 'The Python simplejson module is required'
sys.exit(1)
from gi.repository import Gio
@ -88,36 +88,36 @@ function disable() {
}
def create_extension():
print()
print('''Name should be a very short (ideally descriptive) string.
print
print '''Name should be a very short (ideally descriptive) string.
Examples are: "Click To Focus", "Adblock", "Shell Window Shrinker".
''')
name = input('Name: ').strip()
print()
print('''Description is a single-sentence explanation of what your extension does.
'''
name = raw_input('Name: ').strip()
print
print '''Description is a single-sentence explanation of what your extension does.
Examples are: "Make windows visible on click", "Block advertisement popups"
"Animate windows shrinking on minimize"
''')
description = input('Description: ').strip()
'''
description = raw_input('Description: ').strip()
underifier = re.compile('[^A-Za-z]')
sample_uuid = underifier.sub('_', name)
# TODO use evolution data server
hostname = socket.gethostname()
sample_uuid = sample_uuid + '@' + hostname
print()
print('''Uuid is a globally-unique identifier for your extension.
print
print '''Uuid is a globally-unique identifier for your extension.
This should be in the format of an email address (foo.bar@extensions.example.com), but
need not be an actual email address, though it's a good idea to base the uuid on your
email address. For example, if your email address is janedoe@example.com, you might
use an extension title clicktofocus@janedoe.example.com.''')
uuid = input('Uuid [%s]: ' % (sample_uuid, )).strip()
use an extension title clicktofocus@janedoe.example.com.'''
uuid = raw_input('Uuid [%s]: ' % (sample_uuid, )).strip()
if uuid == '':
uuid = sample_uuid
extension_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'gnome-shell', 'extensions', uuid)
if os.path.exists(extension_path):
print("Extension path %r already exists" % (extension_path, ))
print "Extension path %r already exists" % (extension_path, )
sys.exit(0)
os.makedirs(extension_path)
meta = { 'name': name,
@ -132,13 +132,13 @@ use an extension title clicktofocus@janedoe.example.com.''')
f.write(json.write(meta) + '\n')
f.close()
for filename, contents in SAMPLE_EXTENSION_FILES.items():
for filename, contents in SAMPLE_EXTENSION_FILES.iteritems():
path = os.path.join(extension_path, filename)
f = open(path, 'w')
f.write(contents)
f.close()
print("Created extension in %r" % (extension_path, ))
print "Created extension in %r" % (extension_path, )
extensionjs_path = os.path.join(extension_path, 'extension.js')
subprocess.Popen(['xdg-open', extensionjs_path])
@ -149,19 +149,19 @@ def enable_extension(uuid):
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid in extensions:
print("%r is already enabled." % (uuid,), file=sys.stderr)
print >> sys.stderr, "%r is already enabled." % (uuid,)
sys.exit(1)
extensions.append(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
print("%r is now enabled." % (uuid,), file=sys.stderr)
print >> sys.stderr, "%r is now enabled." % (uuid,)
def disable_extension(uuid):
settings = Gio.Settings(schema='org.gnome.shell')
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid not in extensions:
print("%r is not enabled or installed." % (uuid,), file=sys.stderr)
print >> sys.stderr, "%r is not enabled or installed." % (uuid,)
sys.exit(1)
# Use a while loop here to remove *all* mentions instances
@ -170,7 +170,7 @@ def disable_extension(uuid):
extensions.remove(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
print("%r is now disabled." % (uuid,), file=sys.stderr)
print >> sys.stderr, "%r is now disabled." % (uuid,)
def main():
parser = optparse.OptionParser()

View File

@ -14,14 +14,15 @@ import subprocess
import sys
import tempfile
import base64
from configparser import RawConfigParser
from ConfigParser import RawConfigParser
import hashlib
import hmac
from http import client
from urllib import parse
import httplib
import urlparse
import urllib
def show_version(option, opt_str, value, parser):
print("GNOME Shell Performance Test @VERSION@")
print "GNOME Shell Performance Test @VERSION@"
sys.exit()
def wait_for_dbus_name(wait_name):
@ -40,7 +41,7 @@ def wait_for_dbus_name(wait_name):
None)
def on_timeout():
print("\nFailed to start %s: timed out" % (wait_name,))
print "\nFailed to start %s: timed out" % (wait_name,)
sys.exit(1)
GLib.timeout_add_seconds(7, on_timeout)
@ -130,15 +131,15 @@ def upload_performance_report(report_text):
base_url = config.get('upload', 'url')
system_name = config.get('upload', 'name')
secret_key = config.get('upload', 'key')
except Exception as e:
print("Can't read upload configuration from %s: %s" % (config_file, str(e)))
except Exception, e:
print "Can't read upload configuration from %s: %s" % (config_file, str(e))
sys.exit(1)
# Determine host, port and upload URL from provided data, we're
# a bit extra-careful about normalization since the URL is part
# of the signature.
split = parse.urlsplit(base_url)
split = urlparse.urlsplit(base_url)
scheme = split[0].lower()
netloc = split[1]
base_path = split[2]
@ -150,7 +151,7 @@ def upload_performance_report(report_text):
host, port = m.group(1), None
if scheme != "http":
print("'%s' is not a HTTP URL" % base_url)
print "'%s' is not a HTTP URL" % base_url
sys.exit(1)
if port is None:
@ -165,7 +166,7 @@ def upload_performance_report(report_text):
normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path)
upload_url = normalized_base + '/system/%s/upload' % system_name
upload_path = parse.urlsplit(upload_url)[2] # path portion
upload_path = urlparse.urlsplit(upload_url)[2] # path portion
# Create signature based on upload URL and the report data
@ -173,7 +174,7 @@ def upload_performance_report(report_text):
h = hmac.new(secret_key, digestmod=hashlib.sha1)
h.update(signature_data)
h.update(report_text)
signature = parse.quote(base64.b64encode(h.digest()), "~")
signature = urllib.quote(base64.b64encode(h.digest()), "~")
headers = {
'User-Agent': 'gnome-shell-performance-tool/@VERSION@',
@ -181,15 +182,15 @@ def upload_performance_report(report_text):
'X-Shell-Signature': 'HMAC-SHA1 ' + signature
};
connection = client.HTTPConnection(host, port)
connection = httplib.HTTPConnection(host, port)
connection.request('POST', upload_path, report_text, headers)
response = connection.getresponse()
if response.status == 200:
print("Performance report upload succeeded")
print "Performance report upload succeeded"
else:
print("Performance report upload failed with status %d" % response.status)
print(response.read())
print "Performance report upload failed with status %d" % response.status
print response.read()
def gnome_hwtest_log(*args):
command = ['gnome-hwtest-log', '-t', 'gnome-shell-perf-tool']
@ -206,7 +207,7 @@ def run_performance_test():
start_perf_helper()
for i in range(0, iters):
for i in xrange(0, iters):
# We create an empty temporary file that the shell will overwrite
# with the contents.
handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.")
@ -305,12 +306,12 @@ def run_performance_test():
gnome_hwtest_log('--finished')
else:
# Write a human readable summary
print('------------------------------------------------------------')
print '------------------------------------------------------------';
for metric in sorted(metric_summaries.keys()):
summary = metric_summaries[metric]
print("#", summary['description'])
print(metric, ", ".join((str(x) for x in summary['values'])))
print('------------------------------------------------------------')
print "#", summary['description']
print metric, ", ".join((str(x) for x in summary['values']))
print '------------------------------------------------------------';
return True

View File

@ -1,19 +0,0 @@
<node>
<interface name='org.gtk.Application'>
<method name='Activate'>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='Open'>
<arg type='as' name='uris' direction='in'/>
<arg type='s' name='hint' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='CommandLine'>
<arg type='o' name='path' direction='in'/>
<arg type='aay' name='arguments' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
<arg type='i' name='exit_status' direction='out'/>
</method>
<property name='Busy' type='b' access='read'/>
</interface>
</node>

View File

@ -335,6 +335,7 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
switch (state)
{
case SHELL_APP_STATE_RUNNING:
case SHELL_APP_STATE_BUSY:
g_hash_table_insert (self->priv->running_apps, g_object_ref (app), NULL);
break;
case SHELL_APP_STATE_STARTING:

View File

@ -16,7 +16,6 @@
#include "shell-window-tracker-private.h"
#include "st.h"
#include "gtkactionmuxer.h"
#include "org-gtk-application.h"
#ifdef HAVE_SYSTEMD
#include <systemd/sd-journal.h>
@ -48,16 +47,14 @@ typedef struct {
/* Whether or not we need to resort the windows; this is done on demand */
guint window_sort_stale : 1;
/* DBus property notification subscription */
guint properties_changed_id : 1;
/* See GApplication documentation */
GDBusMenuModel *remote_menu;
GtkActionMuxer *muxer;
char *unique_bus_name;
GDBusConnection *session;
/* GDBus Proxy for getting application busy state */
ShellOrgGtkApplication *application_proxy;
GCancellable *cancellable;
} ShellAppRunningState;
/**
@ -92,7 +89,6 @@ struct _ShellApp
enum {
PROP_0,
PROP_STATE,
PROP_BUSY,
PROP_ID,
PROP_DBUS_ID,
PROP_ACTION_GROUP,
@ -124,9 +120,6 @@ shell_app_get_property (GObject *gobject,
case PROP_STATE:
g_value_set_enum (value, app->state);
break;
case PROP_BUSY:
g_value_set_boolean (value, shell_app_get_busy (app));
break;
case PROP_ID:
g_value_set_string (value, shell_app_get_id (app));
break;
@ -682,6 +675,7 @@ shell_app_activate_full (ShellApp *app,
case SHELL_APP_STATE_STARTING:
break;
case SHELL_APP_STATE_RUNNING:
case SHELL_APP_STATE_BUSY:
shell_app_activate_window (app, NULL, timestamp);
break;
}
@ -1063,55 +1057,38 @@ shell_app_on_ws_switch (MetaScreen *screen,
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
}
gboolean
shell_app_get_busy (ShellApp *app)
{
if (app->running_state != NULL &&
app->running_state->application_proxy != NULL &&
shell_org_gtk_application_get_busy (app->running_state->application_proxy))
return TRUE;
return FALSE;
}
static void
busy_changed_cb (GObject *object,
GParamSpec *pspec,
gpointer user_data)
application_properties_changed (GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
const gchar *interface_name,
const gchar *signal_name,
GVariant *parameters,
gpointer user_data)
{
ShellApp *app = user_data;
GVariant *changed_properties;
gboolean busy = FALSE;
const gchar *interface_name_for_signal;
g_assert (SHELL_IS_APP (app));
g_variant_get (parameters,
"(&s@a{sv}as)",
&interface_name_for_signal,
&changed_properties,
NULL);
g_object_notify (G_OBJECT (app), "busy");
}
if (g_strcmp0 (interface_name_for_signal, "org.gtk.Application") != 0)
return;
static void
get_application_proxy (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
ShellApp *app = user_data;
ShellOrgGtkApplication *proxy;
g_variant_lookup (changed_properties, "Busy", "b", &busy);
g_assert (SHELL_IS_APP (app));
if (busy)
shell_app_state_transition (app, SHELL_APP_STATE_BUSY);
else
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
proxy = shell_org_gtk_application_proxy_new_finish (result, NULL);
if (proxy != NULL)
{
app->running_state->application_proxy = proxy;
g_signal_connect (proxy,
"notify::busy",
G_CALLBACK (busy_changed_cb),
app);
if (shell_org_gtk_application_get_busy (proxy))
g_object_notify (G_OBJECT (app), "busy");
}
if (app->running_state != NULL)
g_clear_object (&app->running_state->cancellable);
g_object_unref (app);
if (changed_properties != NULL)
g_variant_unref (changed_properties);
}
static void
@ -1121,8 +1098,7 @@ shell_app_ensure_busy_watch (ShellApp *app)
MetaWindow *window;
const gchar *object_path;
if (running_state->application_proxy != NULL ||
running_state->cancellable != NULL)
if (running_state->properties_changed_id != 0)
return;
if (running_state->unique_bus_name == NULL)
@ -1134,16 +1110,15 @@ shell_app_ensure_busy_watch (ShellApp *app)
if (object_path == NULL)
return;
running_state->cancellable = g_cancellable_new();
/* Take a reference to app to make sure it isn't finalized before
get_application_proxy runs */
shell_org_gtk_application_proxy_new (running_state->session,
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
running_state->unique_bus_name,
object_path,
running_state->cancellable,
get_application_proxy,
g_object_ref (app));
running_state->properties_changed_id =
g_dbus_connection_signal_subscribe (running_state->session,
running_state->unique_bus_name,
"org.freedesktop.DBus.Properties",
"PropertiesChanged",
object_path,
"org.gtk.Application",
G_DBUS_SIGNAL_FLAGS_NONE,
application_properties_changed, app, NULL);
}
void
@ -1486,13 +1461,8 @@ unref_running_state (ShellAppRunningState *state)
screen = shell_global_get_screen (shell_global_get ());
g_signal_handler_disconnect (screen, state->workspace_switch_id);
g_clear_object (&state->application_proxy);
if (state->cancellable != NULL)
{
g_cancellable_cancel (state->cancellable);
g_clear_object (&state->cancellable);
}
if (state->properties_changed_id != 0)
g_dbus_connection_signal_unsubscribe (state->session, state->properties_changed_id);
g_clear_object (&state->remote_menu);
g_clear_object (&state->muxer);
@ -1585,19 +1555,6 @@ shell_app_class_init(ShellAppClass *klass)
SHELL_APP_STATE_STOPPED,
G_PARAM_READABLE));
/**
* ShellApp:busy:
*
* Whether the application has marked itself as busy.
*/
g_object_class_install_property (gobject_class,
PROP_BUSY,
g_param_spec_boolean ("busy",
"Busy",
"Busy state",
FALSE,
G_PARAM_READABLE));
/**
* ShellApp:id:
*

View File

@ -30,7 +30,8 @@ struct _ShellAppClass
typedef enum {
SHELL_APP_STATE_STOPPED,
SHELL_APP_STATE_STARTING,
SHELL_APP_STATE_RUNNING
SHELL_APP_STATE_RUNNING,
SHELL_APP_STATE_BUSY
} ShellAppState;
GType shell_app_get_type (void) G_GNUC_CONST;
@ -86,8 +87,6 @@ int shell_app_compare (ShellApp *app, ShellApp *other);
void shell_app_update_window_actions (ShellApp *app, MetaWindow *window);
void shell_app_update_app_menu (ShellApp *app, MetaWindow *window);
gboolean shell_app_get_busy (ShellApp *app);
G_END_DECLS
#endif /* __SHELL_APP_H__ */

View File

@ -1132,6 +1132,14 @@ shell_global_end_modal (ShellGlobal *global,
sync_input_region (global);
}
void
shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp)
{
if (global->stage_xwindow != None)
meta_display_freeze_keyboard (global->meta_display, global->stage_xwindow, timestamp);
}
/* Code to close all file descriptors before we exec; copied from gspawn.c in GLib.
*
* Authors: Padraig O'Briain, Matthias Clasen, Lennart Poettering

View File

@ -45,6 +45,8 @@ gboolean shell_global_begin_modal (ShellGlobal *global,
MetaModalOptions options);
void shell_global_end_modal (ShellGlobal *global,
guint32 timestamp);
void shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp);
void shell_global_set_stage_input_region (ShellGlobal *global,
GSList *rectangles);

View File

@ -106,6 +106,9 @@ shell_gtk_embed_window_created_cb (MetaDisplay *display,
0, 0 /* offset x/y */);
cairo_region_destroy (empty_region);
/* Set the actor as unreative so Clutter doesn't pick it, either */
clutter_actor_set_reactive (window_actor, FALSE);
gdk_window_lower (gdk_window);
/* Now that we've found the window we don't need to listen for

View File

@ -12,7 +12,6 @@
#include <gdk/gdkx.h>
#include <X11/extensions/XTest.h>
#include <locale.h>
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY
#include <langinfo.h>
#endif
@ -209,32 +208,6 @@ shell_util_get_week_start ()
return week_start;
}
/**
* shell_util_translate_time_string:
* @str: String to translate
*
* Translate @str according to the locale defined by LC_TIME; unlike
* dcgettext(), the translations is still taken from the LC_MESSAGES
* catalogue and not the LC_TIME one.
*
* Returns: the translated string
*/
const char *
shell_util_translate_time_string (const char *str)
{
const char *locale = g_getenv ("LC_TIME");
const char *res;
if (locale)
setlocale (LC_MESSAGES, locale);
res = gettext (str);
setlocale (LC_MESSAGES, "");
return res;
}
/**
* shell_write_string_to_stream:
* @stream: a #GOutputStream

View File

@ -21,7 +21,6 @@ int shell_util_get_week_start (void);
char *shell_util_format_date (const char *format,
gint64 time_ms);
const char *shell_util_translate_time_string (const char *str);
gboolean shell_write_string_to_stream (GOutputStream *stream,
const char *str,

View File

@ -27,7 +27,7 @@
struct _StBorderImage {
GObject parent;
GFile *file;
char *filename;
int border_top;
int border_right;
int border_bottom;
@ -48,7 +48,7 @@ st_border_image_finalize (GObject *object)
{
StBorderImage *image = ST_BORDER_IMAGE (object);
g_object_unref (image->file);
g_free (image->filename);
G_OBJECT_CLASS (st_border_image_parent_class)->finalize (object);
}
@ -67,18 +67,18 @@ st_border_image_init (StBorderImage *image)
}
StBorderImage *
st_border_image_new (GFile *file,
int border_top,
int border_right,
int border_bottom,
int border_left,
int scale_factor)
st_border_image_new (const char *filename,
int border_top,
int border_right,
int border_bottom,
int border_left,
int scale_factor)
{
StBorderImage *image;
image = g_object_new (ST_TYPE_BORDER_IMAGE, NULL);
image->file = g_object_ref (file);
image->filename = g_strdup (filename);
image->border_top = border_top;
image->border_right = border_right;
image->border_bottom = border_bottom;
@ -88,18 +88,12 @@ st_border_image_new (GFile *file,
return image;
}
/**
* st_border_image_get_file:
* @image: a #StBorder_Image
*
* Returns: (transfer none): the #GFile for the #StBorder_Image
*/
GFile *
st_border_image_get_file (StBorderImage *image)
const char *
st_border_image_get_filename (StBorderImage *image)
{
g_return_val_if_fail (ST_IS_BORDER_IMAGE (image), NULL);
return image->file;
return image->filename;
}
void
@ -141,5 +135,5 @@ st_border_image_equal (StBorderImage *image,
image->border_right == other->border_right &&
image->border_bottom == other->border_bottom &&
image->border_left == other->border_left &&
g_file_equal (image->file, other->file));
strcmp (image->filename, other->filename) == 0);
}

View File

@ -22,7 +22,6 @@
#define __ST_BORDER_IMAGE_H__
#include <glib-object.h>
#include <gio/gio.h>
G_BEGIN_DECLS
@ -40,14 +39,14 @@ typedef struct _StBorderImageClass StBorderImageClass;
GType st_border_image_get_type (void) G_GNUC_CONST;
StBorderImage *st_border_image_new (GFile *file,
StBorderImage *st_border_image_new (const char *filename,
int border_top,
int border_right,
int border_bottom,
int border_left,
int scale_factor);
GFile *st_border_image_get_file (StBorderImage *image);
const char *st_border_image_get_filename (StBorderImage *image);
void st_border_image_get_borders (StBorderImage *image,
int *border_top,
int *border_right,

View File

@ -267,8 +267,7 @@ st_button_key_press (ClutterActor *actor,
{
if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return ||
event->keyval == CLUTTER_KEY_KP_Enter ||
event->keyval == CLUTTER_KEY_ISO_Enter)
event->keyval == CLUTTER_KEY_KP_Enter)
{
st_button_press (button, NULL, ST_BUTTON_ONE, NULL);
return TRUE;
@ -288,8 +287,7 @@ st_button_key_release (ClutterActor *actor,
{
if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return ||
event->keyval == CLUTTER_KEY_KP_Enter ||
event->keyval == CLUTTER_KEY_ISO_Enter)
event->keyval == CLUTTER_KEY_KP_Enter)
{
gboolean is_click;

View File

@ -373,7 +373,6 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min width of the hscrollbar,
* but that's not cleanly defined at the moment */
min_width = 0;
@ -383,7 +382,6 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
switch (priv->vscrollbar_policy)
{
case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
account_for_vscrollbar = FALSE;
break;
case GTK_POLICY_ALWAYS:
@ -445,7 +443,6 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->vscrollbar_policy)
{
case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
@ -457,7 +454,6 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->hscrollbar_policy)
{
case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
account_for_hscrollbar = FALSE;
break;
case GTK_POLICY_ALWAYS:
@ -484,7 +480,6 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min height of the vscrollbar,
* but that's not cleanly defined at the moment */
min_height = 0;
@ -572,7 +567,7 @@ st_scroll_view_allocate (ClutterActor *actor,
}
else
{
hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
/* try without a vertical scrollbar */
clutter_actor_get_preferred_height (priv->child, avail_width, &child_min_height, NULL);
@ -581,20 +576,18 @@ st_scroll_view_allocate (ClutterActor *actor,
}
else
{
vscrollbar_visible = priv->vscrollbar_policy == GTK_POLICY_ALWAYS;
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER;
if (priv->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
hscrollbar_visible = child_min_width > avail_height - (vscrollbar_visible ? 0 : sb_width);
else
hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
}
}
else
{
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER &&
priv->hscrollbar_policy != GTK_POLICY_EXTERNAL;
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER &&
priv->vscrollbar_policy != GTK_POLICY_EXTERNAL;
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER;
}
/* Whether or not we show the scrollbars, if the scrollbars are visible
@ -636,19 +629,15 @@ st_scroll_view_allocate (ClutterActor *actor,
clutter_actor_allocate (priv->hscroll, &child_box, flags);
/* In case the scrollbar policy is NEVER or EXTERNAL or scrollbars
* should be overlayed, we don't trim the content box allocation by
* the scrollbar size.
/* In case the scrollbar policy is NEVER or scrollbars should be
* overlayed, we don't trim the content box allocation by the
* scrollbar size.
* Fold this into the scrollbar sizes to simplify the rest of the
* computations.
*/
if (priv->hscrollbar_policy == GTK_POLICY_NEVER ||
priv->hscrollbar_policy == GTK_POLICY_EXTERNAL ||
priv->overlay_scrollbars)
if (priv->hscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
sb_height = 0;
if (priv->vscrollbar_policy == GTK_POLICY_NEVER ||
priv->vscrollbar_policy == GTK_POLICY_EXTERNAL ||
priv->overlay_scrollbars)
if (priv->vscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
sb_width = 0;
/* Child */

View File

@ -28,8 +28,8 @@
#include <glib.h>
#define CACHE_PREFIX_ICON "icon:"
#define CACHE_PREFIX_FILE "file:"
#define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:"
#define CACHE_PREFIX_URI "uri:"
#define CACHE_PREFIX_URI_FOR_CAIRO "uri-for-cairo:"
struct _StTextureCachePrivate
{
@ -101,7 +101,7 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_SIGNAL_RUN_LAST,
0, /* no default handler slot */
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_FILE);
G_TYPE_NONE, 1, G_TYPE_STRING);
}
/* Evicts all cached textures for named icons */
@ -147,7 +147,7 @@ st_texture_cache_init (StTextureCache *self)
g_free, cogl_object_unref);
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal,
g_object_unref, g_object_unref);
}
@ -268,7 +268,7 @@ typedef struct {
GtkIconInfo *icon_info;
StIconColors *colors;
GFile *file;
char *uri;
} AsyncTextureLoadData;
static void
@ -282,8 +282,8 @@ texture_load_data_free (gpointer p)
if (data->colors)
st_icon_colors_unref (data->colors);
}
else if (data->file)
g_object_unref (data->file);
else if (data->uri)
g_free (data->uri);
if (data->key)
g_free (data->key);
@ -405,17 +405,83 @@ out:
return rotated_pixbuf;
}
static GdkPixbuf*
decode_image (const char *val)
{
int i;
GError *error = NULL;
GdkPixbuf *res = NULL;
struct {
const char *prefix;
const char *mime_type;
} formats[] = {
{ "data:image/x-icon;base64,", "image/x-icon" },
{ "data:image/png;base64,", "image/png" }
};
g_return_val_if_fail (val, NULL);
for (i = 0; i < G_N_ELEMENTS (formats); i++)
{
if (g_str_has_prefix (val, formats[i].prefix))
{
gsize len;
guchar *data = NULL;
char *unescaped;
unescaped = g_uri_unescape_string (val + strlen (formats[i].prefix), NULL);
if (unescaped)
{
data = g_base64_decode (unescaped, &len);
g_free (unescaped);
}
if (data)
{
GdkPixbufLoader *loader;
loader = gdk_pixbuf_loader_new_with_mime_type (formats[i].mime_type, &error);
if (loader &&
gdk_pixbuf_loader_write (loader, data, len, &error) &&
gdk_pixbuf_loader_close (loader, &error))
{
res = gdk_pixbuf_loader_get_pixbuf (loader);
g_object_ref (res);
}
g_object_unref (loader);
g_free (data);
}
}
}
if (!res)
{
if (error)
{
g_warning ("%s\n", error->message);
g_error_free (error);
}
else
g_warning ("incorrect data uri");
}
return res;
}
static GdkPixbuf *
impl_load_pixbuf_file (GFile *file,
impl_load_pixbuf_file (const char *uri,
int available_width,
int available_height,
int scale,
GError **error)
{
GdkPixbuf *pixbuf = NULL;
GFile *file;
char *contents = NULL;
gsize size;
if (g_str_has_prefix (uri, "data:"))
return decode_image (uri);
file = g_file_new_for_uri (uri);
if (g_file_load_contents (file, NULL, &contents, &size, NULL, error))
{
pixbuf = impl_load_pixbuf_data ((const guchar *) contents, size,
@ -424,6 +490,7 @@ impl_load_pixbuf_file (GFile *file,
error);
}
g_object_unref (file);
g_free (contents);
return pixbuf;
@ -440,9 +507,9 @@ load_pixbuf_thread (GSimpleAsyncResult *result,
data = g_async_result_get_user_data (G_ASYNC_RESULT (result));
g_assert (data != NULL);
g_assert (data->file != NULL);
g_assert (data->uri != NULL);
pixbuf = impl_load_pixbuf_file (data->file, data->width, data->height, data->scale, &error);
pixbuf = impl_load_pixbuf_file (data->uri, data->width, data->height, data->scale, &error);
if (error != NULL)
{
@ -580,7 +647,7 @@ static void
load_texture_async (StTextureCache *cache,
AsyncTextureLoadData *data)
{
if (data->file)
if (data->uri)
{
GSimpleAsyncResult *result;
result = g_simple_async_result_new (G_OBJECT (cache), on_pixbuf_loaded, data, load_texture_async);
@ -947,43 +1014,46 @@ file_changed_cb (GFileMonitor *monitor,
gpointer user_data)
{
StTextureCache *cache = user_data;
char *key;
guint file_hash;
char *uri, *key;
if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
return;
file_hash = g_file_hash (file);
uri = g_file_get_uri (file);
key = g_strdup_printf (CACHE_PREFIX_FILE "%u", file_hash);
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash);
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file);
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, uri);
g_free (uri);
}
static void
ensure_monitor_for_file (StTextureCache *cache,
GFile *file)
ensure_monitor_for_uri (StTextureCache *cache,
const gchar *uri)
{
StTextureCachePrivate *priv = cache->priv;
GFile *file = g_file_new_for_uri (uri);
if (g_hash_table_lookup (priv->file_monitors, file) == NULL)
if (g_hash_table_lookup (priv->file_monitors, uri) == NULL)
{
GFileMonitor *monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE,
NULL, NULL);
g_signal_connect (monitor, "changed",
G_CALLBACK (file_changed_cb), cache);
g_hash_table_insert (priv->file_monitors, g_object_ref (file), monitor);
g_hash_table_insert (priv->file_monitors, g_strdup (uri), monitor);
}
g_object_unref (file);
}
typedef struct {
GFile *gfile;
gchar *path;
gint grid_width, grid_height;
gint scale_factor;
ClutterActor *actor;
@ -995,7 +1065,7 @@ static void
on_data_destroy (gpointer data)
{
AsyncImageData *d = (AsyncImageData *)data;
g_object_unref (d->gfile);
g_free (d->path);
g_object_unref (d->actor);
g_free (d);
}
@ -1068,7 +1138,7 @@ load_sliced_image (GSimpleAsyncResult *result,
loader = gdk_pixbuf_loader_new ();
g_signal_connect (loader, "size-prepared", G_CALLBACK (on_loader_size_prepared), data);
if (!g_file_load_contents (data->gfile, NULL, &buffer, &length, NULL, NULL))
if (!g_file_get_contents (data->path, &buffer, &length, NULL))
goto out;
if (!gdk_pixbuf_loader_write (loader, (const guchar *) buffer, length, NULL))
@ -1103,7 +1173,7 @@ load_sliced_image (GSimpleAsyncResult *result,
/**
* st_texture_cache_load_sliced_image:
* @cache: A #StTextureCache
* @file: A #GFile
* @path: Path to a filename
* @grid_width: Width in pixels
* @grid_height: Height in pixels
* @scale: Scale factor of the display
@ -1119,7 +1189,7 @@ load_sliced_image (GSimpleAsyncResult *result,
*/
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,
GFile *file,
const gchar *path,
gint grid_width,
gint grid_height,
gint scale,
@ -1134,7 +1204,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
data->grid_width = grid_width;
data->grid_height = grid_height;
data->scale_factor = scale;
data->gfile = g_object_ref (file);
data->path = g_strdup (path);
data->actor = actor;
data->load_callback = load_callback;
data->load_callback_data = user_data;
@ -1151,9 +1221,9 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
}
/**
* st_texture_cache_load_file_async:
* st_texture_cache_load_uri_async:
* @cache: The texture cache instance
* @file: a #GFile of the image file from which to create a pixbuf
* @uri: uri of the image file from which to create a pixbuf
* @available_width: available width for the image, can be -1 if not limited
* @available_height: available height for the image, can be -1 if not limited
* @scale: scale factor of the display
@ -1165,18 +1235,18 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
* Return value: (transfer none): A new #ClutterActor with no image loaded initially.
*/
ClutterActor *
st_texture_cache_load_file_async (StTextureCache *cache,
GFile *file,
int available_width,
int available_height,
int scale)
st_texture_cache_load_uri_async (StTextureCache *cache,
const gchar *uri,
int available_width,
int available_height,
int scale)
{
ClutterActor *texture;
AsyncTextureLoadData *request;
StTextureCachePolicy policy;
gchar *key;
key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file));
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
policy = ST_TEXTURE_CACHE_POLICY_NONE; /* XXX */
@ -1194,7 +1264,7 @@ st_texture_cache_load_file_async (StTextureCache *cache,
request->cache = cache;
/* Transfer ownership of key */
request->key = key;
request->file = g_object_ref (file);
request->uri = g_strdup (uri);
request->policy = policy;
request->width = available_width;
request->height = available_height;
@ -1203,31 +1273,31 @@ st_texture_cache_load_file_async (StTextureCache *cache,
load_texture_async (cache, request);
}
ensure_monitor_for_file (cache, file);
ensure_monitor_for_uri (cache, uri);
return CLUTTER_ACTOR (texture);
}
static CoglTexture *
st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
StTextureCachePolicy policy,
GFile *file,
int available_width,
int available_height,
int scale,
GError **error)
st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
StTextureCachePolicy policy,
const gchar *uri,
int available_width,
int available_height,
int scale,
GError **error)
{
CoglTexture *texdata;
GdkPixbuf *pixbuf;
char *key;
key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file));
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
texdata = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (texdata == NULL)
{
pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error);
pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, scale, error);
if (!pixbuf)
goto out;
@ -1243,7 +1313,7 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
else
cogl_object_ref (texdata);
ensure_monitor_for_file (cache, file);
ensure_monitor_for_uri (cache, uri);
out:
g_free (key);
@ -1251,25 +1321,25 @@ out:
}
static cairo_surface_t *
st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
StTextureCachePolicy policy,
GFile *file,
int available_width,
int available_height,
int scale,
GError **error)
st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
StTextureCachePolicy policy,
const gchar *uri,
int available_width,
int available_height,
int scale,
GError **error)
{
cairo_surface_t *surface;
GdkPixbuf *pixbuf;
char *key;
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file));
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
surface = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (surface == NULL)
{
pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error);
pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, scale, error);
if (!pixbuf)
goto out;
@ -1285,7 +1355,7 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
else
cairo_surface_reference (surface);
ensure_monitor_for_file (cache, file);
ensure_monitor_for_uri (cache, uri);
out:
g_free (key);
@ -1295,7 +1365,7 @@ out:
/**
* st_texture_cache_load_file_to_cogl_texture: (skip)
* @cache: A #StTextureCache
* @file: A #GFile in supported image format
* @file_path: Path to a file in supported image format
* @scale: Scale factor of the display
*
* This function synchronously loads the given file path
@ -1306,30 +1376,35 @@ out:
*/
CoglTexture *
st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
GFile *file,
const gchar *file_path,
gint scale)
{
CoglTexture *texture;
GFile *file;
char *uri;
GError *error = NULL;
texture = st_texture_cache_load_file_sync_to_cogl_texture (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
file, -1, -1, scale, &error);
file = g_file_new_for_path (file_path);
uri = g_file_get_uri (file);
texture = st_texture_cache_load_uri_sync_to_cogl_texture (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri, -1, -1, scale, &error);
g_object_unref (file);
g_free (uri);
if (texture == NULL)
{
char *uri = g_file_get_uri (file);
g_warning ("Failed to load %s: %s", uri, error->message);
g_warning ("Failed to load %s: %s", file_path, error->message);
g_clear_error (&error);
g_free (uri);
return NULL;
}
return texture;
}
/**
* st_texture_cache_load_file_to_cairo_surface:
* @cache: A #StTextureCache
* @file: A #GFile in supported image format
* @file_path: Path to a file in supported image format
* @scale: Scale factor of the display
*
* This function synchronously loads the given file path
@ -1340,23 +1415,28 @@ st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
*/
cairo_surface_t *
st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
GFile *file,
const gchar *file_path,
gint scale)
{
cairo_surface_t *surface;
GFile *file;
char *uri;
GError *error = NULL;
surface = st_texture_cache_load_file_sync_to_cairo_surface (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
file, -1, -1, scale, &error);
file = g_file_new_for_path (file_path);
uri = g_file_get_uri (file);
surface = st_texture_cache_load_uri_sync_to_cairo_surface (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri, -1, -1, scale, &error);
g_object_unref (file);
g_free (uri);
if (surface == NULL)
{
char *uri = g_file_get_uri (file);
g_warning ("Failed to load %s: %s", uri, error->message);
g_warning ("Failed to load %s: %s", file_path, error->message);
g_clear_error (&error);
g_free (uri);
return NULL;
}
return surface;
}

View File

@ -70,7 +70,7 @@ StTextureCache* st_texture_cache_get_default (void);
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,
GFile *file,
const gchar *path,
gint grid_width,
gint grid_height,
gint scale,
@ -87,18 +87,18 @@ ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
gint size,
gint scale);
ClutterActor *st_texture_cache_load_file_async (StTextureCache *cache,
GFile *file,
int available_width,
int available_height,
int scale);
ClutterActor *st_texture_cache_load_uri_async (StTextureCache *cache,
const gchar *uri,
int available_width,
int available_height,
int scale);
CoglTexture *st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
GFile *file,
const gchar *file_path,
gint scale);
cairo_surface_t *st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
GFile *file,
const gchar *file_path,
gint scale);
/**

View File

@ -600,7 +600,7 @@ create_cairo_pattern_of_background_image (StThemeNode *node,
cairo_pattern_t *pattern;
cairo_content_t content;
cairo_matrix_t matrix;
GFile *file;
const char *file;
StTextureCache *texture_cache;
@ -1037,7 +1037,7 @@ st_theme_node_prerender_background (StThemeNode *node,
}
else
{
GFile *background_image;
const char *background_image;
background_image = st_theme_node_get_background_image (node);
@ -1303,14 +1303,14 @@ st_theme_node_load_border_image (StThemeNode *node)
if (border_image == NULL)
goto out;
GFile *file;
file = st_border_image_get_file (border_image);
const char *filename;
filename = st_border_image_get_filename (border_image);
int scale_factor;
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
node->border_slices_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
file, scale_factor);
filename, scale_factor);
if (node->border_slices_texture == COGL_INVALID_HANDLE)
goto out;
@ -1348,7 +1348,7 @@ st_theme_node_load_background_image (StThemeNode *node)
{
if (node->background_texture == COGL_INVALID_HANDLE)
{
GFile *background_image;
const char *background_image;
StShadow *background_image_shadow_spec;
background_image = st_theme_node_get_background_image (node);

View File

@ -25,7 +25,6 @@
#include <gdk/gdk.h>
#include "st-theme-node.h"
#include <libcroco/libcroco.h>
#include "st-types.h"
G_BEGIN_DECLS
@ -59,7 +58,6 @@ struct _StThemeNode {
int border_radius[4];
int outline_width;
guint padding[4];
guint margin[4];
int width;
int height;
@ -70,7 +68,7 @@ struct _StThemeNode {
int transition_duration;
GFile *background_image;
char *background_image;
StBorderImage *border_image;
StShadow *box_shadow;
StShadow *background_image_shadow;
@ -92,8 +90,6 @@ struct _StThemeNode {
guint background_position_set : 1;
guint background_repeat : 1;
gboolean margin_set : 4;
guint properties_computed : 1;
guint geometry_computed : 1;
guint background_computed : 1;
@ -125,8 +121,6 @@ struct _StThemeNodeClass {
void _st_theme_node_ensure_background (StThemeNode *node);
void _st_theme_node_ensure_geometry (StThemeNode *node);
void _st_theme_node_apply_margins (StThemeNode *node,
ClutterActor *actor);
G_END_DECLS

View File

@ -158,10 +158,7 @@ st_theme_node_finalize (GObject *object)
}
if (node->background_image)
{
g_object_unref (node->background_image);
node->background_image = NULL;
}
g_free (node->background_image);
if (node->background_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (node->background_texture);
@ -908,7 +905,7 @@ st_theme_node_get_double (StThemeNode *node,
* parent's parent, and so forth. Note that if the property has a
* value of 'inherit' it will be inherited even if %FALSE is passed
* in for @inherit; this only affects the default behavior for inheritance.
* @file: (out) (transfer full): location to store the newly allocated value that was
* @value: (out): location to store the newly allocated value that was
* determined. If the property is not found, the value in this location
* will not be changed.
*
@ -923,7 +920,7 @@ gboolean
st_theme_node_lookup_url (StThemeNode *node,
const char *property_name,
gboolean inherit,
GFile **file)
char **value)
{
gboolean result = FALSE;
int i;
@ -938,6 +935,7 @@ st_theme_node_lookup_url (StThemeNode *node,
{
CRTerm *term = decl->value;
CRStyleSheet *base_stylesheet;
GFile *file;
if (term->type != TERM_URI && term->type != TERM_STRING)
continue;
@ -947,21 +945,23 @@ st_theme_node_lookup_url (StThemeNode *node,
else
base_stylesheet = NULL;
*file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
*value = g_file_get_path (file);
g_object_unref (file);
result = TRUE;
break;
}
}
if (!result && inherit && node->parent_node)
result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, file);
result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, value);
return result;
}
/**
/*
* st_theme_node_get_url:
* @node: a #StThemeNode
* @property_name: The name of the string property
@ -972,18 +972,18 @@ st_theme_node_lookup_url (StThemeNode *node,
* and lets you handle the case where the theme does not specify the
* indicated value.
*
* Returns: (transfer full): the newly allocated value if found.
* Return value: the newly allocated value if found.
* If @property_name is not found, a warning will be logged and %NULL
* will be returned.
*/
GFile *
char *
st_theme_node_get_url (StThemeNode *node,
const char *property_name)
{
GFile *file;
char *value;
if (st_theme_node_lookup_url (node, property_name, FALSE, &file))
return file;
if (st_theme_node_lookup_url (node, property_name, FALSE, &value))
return value;
else
{
g_warning ("Did not find string property '%s'", property_name);
@ -1657,100 +1657,6 @@ do_padding_property (StThemeNode *node,
}
}
static void
do_margin_property_term (StThemeNode *node,
CRTerm *term,
gboolean left,
gboolean right,
gboolean top,
gboolean bottom)
{
int value;
if (get_length_from_term_int (node, term, FALSE, &value) != VALUE_FOUND)
return;
if (left)
{
node->margin[ST_SIDE_LEFT] = value;
node->margin_set |= 1 << ST_SIDE_LEFT;
}
if (right)
{
node->margin[ST_SIDE_RIGHT] = value;
node->margin_set |= 1 << ST_SIDE_RIGHT;
}
if (top)
{
node->margin[ST_SIDE_TOP] = value;
node->margin_set |= 1 << ST_SIDE_TOP;
}
if (bottom)
{
node->margin[ST_SIDE_BOTTOM] = value;
node->margin_set |= 1 << ST_SIDE_BOTTOM;
}
}
static void
do_margin_property (StThemeNode *node,
CRDeclaration *decl)
{
const char *property_name = decl->property->stryng->str + 6; /* Skip 'margin' */
if (strcmp (property_name, "") == 0)
{
/* Slight deviation ... if we don't understand some of the terms and understand others,
* then we set the ones we understand and ignore the others instead of ignoring the
* whole thing
*/
if (decl->value == NULL) /* 0 values */
return;
else if (decl->value->next == NULL) /* 1 value */
{
do_margin_property_term (node, decl->value, TRUE, TRUE, TRUE, TRUE); /* left/right/top/bottom */
return;
}
else if (decl->value->next->next == NULL) /* 2 values */
{
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, TRUE); /* top/bottom */
do_margin_property_term (node, decl->value->next, TRUE, TRUE, FALSE, FALSE); /* left/right */
}
else if (decl->value->next->next->next == NULL) /* 3 values */
{
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); /* top */
do_margin_property_term (node, decl->value->next, TRUE, TRUE, FALSE, FALSE); /* left/right */
do_margin_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); /* bottom */
}
else if (decl->value->next->next->next->next == NULL) /* 4 values */
{
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); /* top */
do_margin_property_term (node, decl->value->next, FALSE, TRUE, FALSE, FALSE); /* right */
do_margin_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); /* bottom */
do_margin_property_term (node, decl->value->next->next->next, TRUE, FALSE, FALSE, FALSE); /* left */
}
else
{
g_warning ("Too many values for margin property");
return;
}
}
else
{
if (decl->value == NULL || decl->value->next != NULL)
return;
if (strcmp (property_name, "-left") == 0)
do_margin_property_term (node, decl->value, TRUE, FALSE, FALSE, FALSE);
else if (strcmp (property_name, "-right") == 0)
do_margin_property_term (node, decl->value, FALSE, TRUE, FALSE, FALSE);
else if (strcmp (property_name, "-top") == 0)
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE);
else if (strcmp (property_name, "-bottom") == 0)
do_margin_property_term (node, decl->value, FALSE, FALSE, FALSE, TRUE);
}
}
static void
do_size_property (StThemeNode *node,
CRDeclaration *decl,
@ -1801,8 +1707,6 @@ _st_theme_node_ensure_geometry (StThemeNode *node)
do_outline_property (node, decl);
else if (g_str_has_prefix (property_name, "padding"))
do_padding_property (node, decl);
else if (g_str_has_prefix (property_name, "margin"))
do_margin_property (node, decl);
else if (strcmp (property_name, "width") == 0)
do_size_property (node, decl, &width);
else if (strcmp (property_name, "height") == 0)
@ -2022,7 +1926,8 @@ _st_theme_node_ensure_background (StThemeNode *node)
CRTerm *term;
/* background: property sets all terms to specified or default values */
node->background_color = TRANSPARENT_COLOR;
g_clear_object (&node->background_image);
g_free (node->background_image);
node->background_image = NULL;
node->background_position_set = FALSE;
node->background_size = ST_BACKGROUND_SIZE_AUTO;
@ -2038,7 +1943,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
if (node->parent_node)
{
st_theme_node_get_background_color (node->parent_node, &node->background_color);
node->background_image = g_object_ref (st_theme_node_get_background_image (node->parent_node));
node->background_image = g_strdup (st_theme_node_get_background_image (node->parent_node));
}
}
else if (term_is_none (term))
@ -2059,7 +1964,8 @@ _st_theme_node_ensure_background (StThemeNode *node)
base_stylesheet,
term->content.str->stryng->str);
node->background_image = file;
node->background_image = g_file_get_path (file);
g_object_unref (file);
}
}
}
@ -2156,25 +2062,30 @@ _st_theme_node_ensure_background (StThemeNode *node)
if (decl->value->type == TERM_URI)
{
CRStyleSheet *base_stylesheet;
GFile *file;
if (decl->parent_statement != NULL)
base_stylesheet = decl->parent_statement->parent_sheet;
else
base_stylesheet = NULL;
g_clear_object (&node->background_image);
node->background_image = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
g_free (node->background_image);
file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
node->background_image = g_file_get_path (file);
g_object_unref (file);
}
else if (term_is_inherit (decl->value))
{
g_clear_object (&node->background_image);
node->background_image = g_object_ref (st_theme_node_get_background_image (node->parent_node));
g_free (node->background_image);
node->background_image = g_strdup (st_theme_node_get_background_image (node->parent_node));
}
else if (term_is_none (decl->value))
{
g_clear_object (&node->background_image);
g_free (node->background_image);
node->background_image = NULL;
}
}
else if (strcmp (property_name, "-gradient-direction") == 0)
@ -2231,13 +2142,7 @@ st_theme_node_get_background_color (StThemeNode *node,
*color = node->background_color;
}
/**
* st_theme_node_get_background_image:
* @node: a #StThemeNode
*
* Returns: (transfer none): @node's background image.
*/
GFile *
const char *
st_theme_node_get_background_image (StThemeNode *node)
{
g_return_val_if_fail (ST_IS_THEME_NODE (node), NULL);
@ -2353,18 +2258,6 @@ st_theme_node_get_padding (StThemeNode *node,
return node->padding[side];
}
double
st_theme_node_get_margin (StThemeNode *node,
StSide side)
{
g_return_val_if_fail (ST_IS_THEME_NODE (node), 0.);
g_return_val_if_fail (side >= ST_SIDE_TOP && side <= ST_SIDE_LEFT, 0.);
_st_theme_node_ensure_geometry (node);
return node->margin[side];
}
/**
* st_theme_node_get_transition_duration:
* @node: an #StThemeNode
@ -3001,6 +2894,7 @@ st_theme_node_get_border_image (StThemeNode *node)
int border_left;
GFile *file;
char *filename;
/* Support border-image: none; to suppress a previously specified border image */
if (term_is_none (term))
@ -3079,15 +2973,17 @@ st_theme_node_get_border_image (StThemeNode *node)
base_stylesheet = NULL;
file = _st_theme_resolve_url (node->theme, base_stylesheet, url);
filename = g_file_get_path (file);
g_object_unref (file);
if (file == NULL)
if (filename == NULL)
goto next_property;
node->border_image = st_border_image_new (file,
node->border_image = st_border_image_new (filename,
border_top, border_right, border_bottom, border_left,
scale_factor);
g_object_unref (file);
g_free (filename);
return node->border_image;
}
@ -3137,28 +3033,6 @@ st_theme_node_get_vertical_padding (StThemeNode *node)
return padding;
}
void
_st_theme_node_apply_margins (StThemeNode *node,
ClutterActor *actor)
{
g_return_if_fail (ST_IS_THEME_NODE (node));
_st_theme_node_ensure_geometry (node);
// In the case that a CSS margin is not specified, we don't to set a value
// of 0 to the clutter actor margin. In this manner it allows to use Clutter
// margin values set in the code. However, the margins that are set both in
// the code and in the CSS on the same side, the result is unpredictable.
if (node->margin_set & 1 << ST_SIDE_LEFT)
clutter_actor_set_margin_left (actor, st_theme_node_get_margin(node, ST_SIDE_LEFT));
if (node->margin_set & 1 << ST_SIDE_RIGHT)
clutter_actor_set_margin_right (actor, st_theme_node_get_margin(node, ST_SIDE_RIGHT));
if (node->margin_set & 1 << ST_SIDE_TOP)
clutter_actor_set_margin_top (actor, st_theme_node_get_margin(node, ST_SIDE_TOP));
if (node->margin_set & 1 << ST_SIDE_BOTTOM)
clutter_actor_set_margin_bottom (actor, st_theme_node_get_margin(node, ST_SIDE_BOTTOM));
}
static GetFromTermResult
parse_shadow_property (StThemeNode *node,
CRDeclaration *decl,
@ -3979,9 +3853,7 @@ st_theme_node_paint_equal (StThemeNode *node,
!clutter_color_equal (&node->background_gradient_end, &other->background_gradient_end))
return FALSE;
if ((node->background_image != NULL) &&
(other->background_image != NULL) &&
!g_file_equal (node->background_image, other->background_image))
if (g_strcmp0 (node->background_image, other->background_image) != 0)
return FALSE;
_st_theme_node_ensure_geometry (node);

View File

@ -162,7 +162,7 @@ gboolean st_theme_node_lookup_shadow (StThemeNode *node,
gboolean st_theme_node_lookup_url (StThemeNode *node,
const char *property_name,
gboolean inherit,
GFile **file);
char **value);
/* Easier-to-use variants of the above, for application-level use */
void st_theme_node_get_color (StThemeNode *node,
@ -174,7 +174,7 @@ gdouble st_theme_node_get_length (StThemeNode *node,
const char *property_name);
StShadow *st_theme_node_get_shadow (StThemeNode *node,
const char *property_name);
GFile *st_theme_node_get_url (StThemeNode *node,
char *st_theme_node_get_url (StThemeNode *node,
const char *property_name);
/* Specific getters for particular properties: cached
@ -188,7 +188,7 @@ void st_theme_node_get_background_gradient (StThemeNode *node,
ClutterColor *start,
ClutterColor *end);
GFile *st_theme_node_get_background_image (StThemeNode *node);
const char *st_theme_node_get_background_image (StThemeNode *node);
int st_theme_node_get_border_width (StThemeNode *node,
StSide side);
@ -208,9 +208,6 @@ double st_theme_node_get_padding (StThemeNode *node,
double st_theme_node_get_horizontal_padding (StThemeNode *node);
double st_theme_node_get_vertical_padding (StThemeNode *node);
double st_theme_node_get_margin (StThemeNode *node,
StSide side);
int st_theme_node_get_width (StThemeNode *node);
int st_theme_node_get_height (StThemeNode *node);
int st_theme_node_get_min_width (StThemeNode *node);

View File

@ -60,13 +60,13 @@ struct _StTheme
{
GObject parent;
GFile *application_stylesheet;
GFile *default_stylesheet;
GFile *theme_stylesheet;
char *application_stylesheet;
char *default_stylesheet;
char *theme_stylesheet;
GSList *custom_stylesheets;
GHashTable *stylesheets_by_file;
GHashTable *files_by_stylesheet;
GHashTable *stylesheets_by_filename;
GHashTable *filenames_by_stylesheet;
CRCascade *cascade;
};
@ -98,25 +98,12 @@ G_DEFINE_TYPE (StTheme, st_theme, G_TYPE_OBJECT)
#define strqcmp(str,lit,lit_len) \
(strlen (str) != (lit_len) || memcmp (str, lit, lit_len))
static gboolean
file_equal0 (GFile *file1,
GFile *file2)
{
if (file1 == file2)
return TRUE;
if ((file1 == NULL) || (file2 == NULL))
return FALSE;
return g_file_equal (file1, file2);
}
static void
st_theme_init (StTheme *theme)
{
theme->stylesheets_by_file = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
(GDestroyNotify)g_object_unref, (GDestroyNotify)cr_stylesheet_unref);
theme->files_by_stylesheet = g_hash_table_new (g_direct_hash, g_direct_equal);
theme->stylesheets_by_filename = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify)g_free, (GDestroyNotify)cr_stylesheet_unref);
theme->filenames_by_stylesheet = g_hash_table_new (g_direct_hash, g_direct_equal);
}
static void
@ -137,10 +124,10 @@ st_theme_class_init (StThemeClass *klass)
*/
g_object_class_install_property (object_class,
PROP_APPLICATION_STYLESHEET,
g_param_spec_object ("application-stylesheet",
g_param_spec_string ("application-stylesheet",
"Application Stylesheet",
"Stylesheet with application-specific styling",
G_TYPE_FILE,
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
/**
@ -151,10 +138,10 @@ st_theme_class_init (StThemeClass *klass)
*/
g_object_class_install_property (object_class,
PROP_THEME_STYLESHEET,
g_param_spec_object ("theme-stylesheet",
g_param_spec_string ("theme-stylesheet",
"Theme Stylesheet",
"Stylesheet with theme-specific styling",
G_TYPE_FILE,
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
/**
@ -165,10 +152,10 @@ st_theme_class_init (StThemeClass *klass)
*/
g_object_class_install_property (object_class,
PROP_DEFAULT_STYLESHEET,
g_param_spec_object ("default-stylesheet",
g_param_spec_string ("default-stylesheet",
"Default Stylesheet",
"Stylesheet with global default styling",
G_TYPE_FILE,
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
signals[STYLESHEETS_CHANGED] =
@ -181,32 +168,23 @@ st_theme_class_init (StThemeClass *klass)
}
static CRStyleSheet *
parse_stylesheet (GFile *file,
GError **error)
parse_stylesheet (const char *filename,
GError **error)
{
enum CRStatus status;
CRStyleSheet *stylesheet;
char *contents;
gsize length;
if (file == NULL)
if (filename == NULL)
return NULL;
if (!g_file_load_contents (file, NULL, &contents, &length, NULL, error))
return NULL;
status = cr_om_parser_simply_parse_buf ((const guchar *) contents,
length,
CR_UTF_8,
&stylesheet);
g_free (contents);
status = cr_om_parser_simply_parse_file ((const guchar *) filename,
CR_UTF_8,
&stylesheet);
if (status != CR_OK)
{
char *uri = g_file_get_uri (file);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Error parsing stylesheet '%s'; errcode:%d", uri, status);
g_free (uri);
"Error parsing stylesheet '%s'; errcode:%d", filename, status);
return NULL;
}
@ -225,12 +203,12 @@ _st_theme_parse_declaration_list (const char *str)
/* Just g_warning for now until we have something nicer to do */
static CRStyleSheet *
parse_stylesheet_nofail (GFile *file)
parse_stylesheet_nofail (const char *filename)
{
GError *error = NULL;
CRStyleSheet *result;
result = parse_stylesheet (file, &error);
result = parse_stylesheet (filename, &error);
if (error)
{
g_warning ("%s", error->message);
@ -241,33 +219,35 @@ parse_stylesheet_nofail (GFile *file)
static void
insert_stylesheet (StTheme *theme,
GFile *file,
const char *filename,
CRStyleSheet *stylesheet)
{
char *filename_copy;
if (stylesheet == NULL)
return;
g_object_ref (file);
filename_copy = g_strdup(filename);
cr_stylesheet_ref (stylesheet);
g_hash_table_insert (theme->stylesheets_by_file, file, stylesheet);
g_hash_table_insert (theme->files_by_stylesheet, stylesheet, file);
g_hash_table_insert (theme->stylesheets_by_filename, filename_copy, stylesheet);
g_hash_table_insert (theme->filenames_by_stylesheet, stylesheet, filename_copy);
}
gboolean
st_theme_load_stylesheet (StTheme *theme,
GFile *file,
const char *path,
GError **error)
{
CRStyleSheet *stylesheet;
stylesheet = parse_stylesheet (file, error);
stylesheet = parse_stylesheet (path, error);
if (!stylesheet)
return FALSE;
stylesheet->app_data = GUINT_TO_POINTER (TRUE);
insert_stylesheet (theme, file, stylesheet);
insert_stylesheet (theme, path, stylesheet);
cr_stylesheet_ref (stylesheet);
theme->custom_stylesheets = g_slist_prepend (theme->custom_stylesheets, stylesheet);
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
@ -277,11 +257,11 @@ st_theme_load_stylesheet (StTheme *theme,
void
st_theme_unload_stylesheet (StTheme *theme,
GFile *file)
const char *path)
{
CRStyleSheet *stylesheet;
stylesheet = g_hash_table_lookup (theme->stylesheets_by_file, file);
stylesheet = g_hash_table_lookup (theme->stylesheets_by_filename, path);
if (!stylesheet)
return;
@ -289,8 +269,8 @@ st_theme_unload_stylesheet (StTheme *theme,
return;
theme->custom_stylesheets = g_slist_remove (theme->custom_stylesheets, stylesheet);
g_hash_table_remove (theme->stylesheets_by_file, file);
g_hash_table_remove (theme->files_by_stylesheet, stylesheet);
g_hash_table_remove (theme->stylesheets_by_filename, path);
g_hash_table_remove (theme->filenames_by_stylesheet, stylesheet);
cr_stylesheet_unref (stylesheet);
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
}
@ -299,7 +279,7 @@ st_theme_unload_stylesheet (StTheme *theme,
* st_theme_get_custom_stylesheets:
* @theme: an #StTheme
*
* Returns: (transfer full) (element-type GFile): the list of stylesheet files
* Returns: (transfer full) (element-type utf8): the list of stylesheet filenames
* that were loaded with st_theme_load_stylesheet()
*/
GSList*
@ -311,9 +291,9 @@ st_theme_get_custom_stylesheets (StTheme *theme)
for (iter = theme->custom_stylesheets; iter; iter = iter->next)
{
CRStyleSheet *stylesheet = iter->data;
GFile *file = g_hash_table_lookup (theme->files_by_stylesheet, stylesheet);
gchar *filename = g_hash_table_lookup (theme->filenames_by_stylesheet, stylesheet);
result = g_slist_prepend (result, g_object_ref (file));
result = g_slist_prepend (result, g_strdup (filename));
}
return result;
@ -354,12 +334,12 @@ st_theme_finalize (GObject * object)
g_slist_free (theme->custom_stylesheets);
theme->custom_stylesheets = NULL;
g_hash_table_destroy (theme->stylesheets_by_file);
g_hash_table_destroy (theme->files_by_stylesheet);
g_hash_table_destroy (theme->stylesheets_by_filename);
g_hash_table_destroy (theme->filenames_by_stylesheet);
g_clear_object (&theme->application_stylesheet);
g_clear_object (&theme->theme_stylesheet);
g_clear_object (&theme->default_stylesheet);
g_free (theme->application_stylesheet);
g_free (theme->theme_stylesheet);
g_free (theme->default_stylesheet);
if (theme->cascade)
{
@ -382,39 +362,36 @@ st_theme_set_property (GObject *object,
{
case PROP_APPLICATION_STYLESHEET:
{
GFile *file = g_value_get_object (value);
const char *path = g_value_get_string (value);
if (!file_equal0 (file, theme->application_stylesheet))
if (path != theme->application_stylesheet)
{
g_clear_object (&theme->application_stylesheet);
if (file != NULL)
theme->application_stylesheet = g_object_ref (file);
g_free (theme->application_stylesheet);
theme->application_stylesheet = g_strdup (path);
}
break;
}
case PROP_THEME_STYLESHEET:
{
GFile *file = g_value_get_object (value);
const char *path = g_value_get_string (value);
if (!file_equal0 (file, theme->theme_stylesheet))
if (path != theme->theme_stylesheet)
{
g_clear_object (&theme->theme_stylesheet);
if (file != NULL)
theme->theme_stylesheet = g_object_ref (file);
g_free (theme->theme_stylesheet);
theme->theme_stylesheet = g_strdup (path);
}
break;
}
case PROP_DEFAULT_STYLESHEET:
{
GFile *file = g_value_get_object (value);
const char *path = g_value_get_string (value);
if (!file_equal0 (file, theme->default_stylesheet))
if (path != theme->default_stylesheet)
{
g_clear_object (&theme->default_stylesheet);
if (file != NULL)
theme->default_stylesheet = g_object_ref (file);
g_free (theme->default_stylesheet);
theme->default_stylesheet = g_strdup (path);
}
break;
@ -436,13 +413,13 @@ st_theme_get_property (GObject *object,
switch (prop_id)
{
case PROP_APPLICATION_STYLESHEET:
g_value_set_object (value, theme->application_stylesheet);
g_value_set_string (value, theme->application_stylesheet);
break;
case PROP_THEME_STYLESHEET:
g_value_set_object (value, theme->theme_stylesheet);
g_value_set_string (value, theme->theme_stylesheet);
break;
case PROP_DEFAULT_STYLESHEET:
g_value_set_object (value, theme->default_stylesheet);
g_value_set_string (value, theme->default_stylesheet);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -462,9 +439,9 @@ st_theme_get_property (GObject *object,
* Return value: the newly created theme object
**/
StTheme *
st_theme_new (GFile *application_stylesheet,
GFile *theme_stylesheet,
GFile *default_stylesheet)
st_theme_new (const char *application_stylesheet,
const char *theme_stylesheet,
const char *default_stylesheet)
{
StTheme *theme = g_object_new (ST_TYPE_THEME,
"application-stylesheet", application_stylesheet,
@ -875,19 +852,26 @@ add_matched_properties (StTheme *a_this,
if (import_rule->sheet == NULL)
{
GFile *file = NULL;
char *filename = NULL;
if (import_rule->url->stryng && import_rule->url->stryng->str)
{
GFile *file;
file = _st_theme_resolve_url (a_this,
a_nodesheet,
import_rule->url->stryng->str);
import_rule->sheet = parse_stylesheet (file, NULL);
filename = g_file_get_path (file);
g_object_unref (file);
}
if (filename)
import_rule->sheet = parse_stylesheet (filename, NULL);
if (import_rule->sheet)
{
insert_stylesheet (a_this, file, import_rule->sheet);
insert_stylesheet (a_this, filename, import_rule->sheet);
/* refcount of stylesheets starts off at zero, so we don't need to unref! */
}
else
@ -898,8 +882,8 @@ add_matched_properties (StTheme *a_this,
import_rule->sheet = (CRStyleSheet *) - 1;
}
if (file)
g_object_unref (file);
if (filename)
g_free (filename);
}
if (import_rule->sheet != (CRStyleSheet *) - 1)
@ -1024,8 +1008,8 @@ _st_theme_get_matched_properties (StTheme *theme,
return props;
}
/* Resolve an url from an url() reference in a stylesheet into a GFile,
* if possible. The resolution here is distinctly lame and
/* Resolve an url from an url() reference in a stylesheet into an absolute
* local filename, if possible. The resolution here is distinctly lame and
* will fail on many examples.
*/
GFile *
@ -1034,7 +1018,7 @@ _st_theme_resolve_url (StTheme *theme,
const char *url)
{
char *scheme;
GFile *resource;
GFile *stylesheet, *resource;
if ((scheme = g_uri_parse_scheme (url)))
{
@ -1043,18 +1027,21 @@ _st_theme_resolve_url (StTheme *theme,
}
else if (base_stylesheet != NULL)
{
GFile *base_file = NULL, *parent;
const char *base_filename = NULL;
char *dirname;
base_file = g_hash_table_lookup (theme->files_by_stylesheet, base_stylesheet);
base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet);
/* This is an internal function, if we get here with
a bad @base_stylesheet we have a problem. */
g_assert (base_file);
g_assert (base_filename);
parent = g_file_get_parent (base_file);
resource = g_file_resolve_relative_path (parent, url);
dirname = g_path_get_dirname (base_filename);
stylesheet = g_file_new_for_path (dirname);
resource = g_file_resolve_relative_path (stylesheet, url);
g_object_unref (parent);
g_object_unref (stylesheet);
g_free (dirname);
}
else
{

View File

@ -47,12 +47,12 @@ typedef struct _StThemeClass StThemeClass;
GType st_theme_get_type (void) G_GNUC_CONST;
StTheme *st_theme_new (GFile *application_stylesheet,
GFile *theme_stylesheet,
GFile *default_stylesheet);
StTheme *st_theme_new (const char *application_stylesheet,
const char *theme_stylesheet,
const char *default_stylesheet);
gboolean st_theme_load_stylesheet (StTheme *theme, GFile *file, GError **error);
void st_theme_unload_stylesheet (StTheme *theme, GFile *file);
gboolean st_theme_load_stylesheet (StTheme *theme, const char *path, GError **error);
void st_theme_unload_stylesheet (StTheme *theme, const char *path);
GSList *st_theme_get_custom_stylesheets (StTheme *theme);
G_END_DECLS

View File

@ -40,7 +40,6 @@
#include "st-texture-cache.h"
#include "st-theme-context.h"
#include "st-theme-node-transition.h"
#include "st-theme-node-private.h"
#include "st-widget-accessible.h"
@ -278,26 +277,26 @@ current_paint_state (StWidget *widget)
static void
st_widget_texture_cache_changed (StTextureCache *cache,
GFile *file,
const char *uri,
gpointer user_data)
{
StWidget *actor = ST_WIDGET (user_data);
StThemeNode *node = actor->priv->theme_node;
char *path;
gboolean changed = FALSE;
GFile *theme_file;
if (node == NULL)
return;
theme_file = st_theme_node_get_background_image (node);
if ((theme_file != NULL) && g_file_equal (theme_file, file))
path = g_filename_from_uri (uri, NULL, NULL);
if (g_strcmp0 (st_theme_node_get_background_image (node), path) == 0)
{
st_theme_node_invalidate_background_image (node);
changed = TRUE;
}
theme_file = st_border_image_get_file (st_theme_node_get_border_image (node));
if ((theme_file != NULL) && g_file_equal (theme_file, file))
if (g_strcmp0 (st_border_image_get_filename (st_theme_node_get_border_image (node)), path) == 0)
{
st_theme_node_invalidate_border_image (node);
changed = TRUE;
@ -318,6 +317,8 @@ st_widget_texture_cache_changed (StTextureCache *cache,
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
}
g_free (path);
}
static void
@ -1541,8 +1542,6 @@ st_widget_recompute_style (StWidget *widget,
return;
}
_st_theme_node_apply_margins (new_theme_node, CLUTTER_ACTOR (widget));
if (!old_theme_node ||
!st_theme_node_geometry_equal (old_theme_node, new_theme_node))
clutter_actor_queue_relayout ((ClutterActor *) widget);

View File

@ -34,9 +34,6 @@ static StThemeNode *group2;
static StThemeNode *text3;
static StThemeNode *text4;
static StThemeNode *group3;
static StThemeNode *group4;
static StThemeNode *group5;
static StThemeNode *group6;
static StThemeNode *cairo_texture;
static gboolean fail;
@ -176,21 +173,17 @@ assert_background_image (StThemeNode *node,
const char *node_description,
const char *expected)
{
GFile *value = st_theme_node_get_background_image (node);
GFile *expected_file;
const char *value = st_theme_node_get_background_image (node);
if (expected == NULL)
expected = "(null)";
if (value == NULL)
value = "(null)";
if (expected != NULL && value != NULL)
if (strcmp (expected, value) != 0)
{
expected_file = g_file_new_for_path (expected);
if (!g_file_equal (expected_file, value))
{
char *uri = g_file_get_uri (expected_file);
g_print ("%s: %s.background-image: expected: %s, got: %s\n",
test, node_description, expected, uri);
fail = TRUE;
g_free (uri);
}
g_print ("%s: %s.background-image: expected: %s, got: %s\n",
test, node_description, expected, value);
fail = TRUE;
}
}
@ -236,19 +229,6 @@ test_lengths (void)
/* 1in == 72pt == 96px, at 96dpi */
assert_length ("group1", "padding-left", 96.,
st_theme_node_get_padding (group1, ST_SIDE_LEFT));
/* 12pt == 16px at 96dpi */
assert_length ("group1", "margin-top", 16.,
st_theme_node_get_margin (group1, ST_SIDE_TOP));
/* 12px == 12px */
assert_length ("group1", "margin-right", 12.,
st_theme_node_get_margin (group1, ST_SIDE_RIGHT));
/* 2em == 32px (with a 12pt font) */
assert_length ("group1", "margin-bottom", 32.,
st_theme_node_get_margin (group1, ST_SIDE_BOTTOM));
/* 1in == 72pt == 96px, at 96dpi */
assert_length ("group1", "margin-left", 96.,
st_theme_node_get_margin (group1, ST_SIDE_LEFT));
}
static void
@ -298,54 +278,6 @@ test_padding (void)
st_theme_node_get_padding (group2, ST_SIDE_LEFT));
}
static void
test_margin (void)
{
test = "margin";
/* Test that a 4-sided margin property assigns the right margin to
* all sides */
assert_length ("group2", "margin-top", 1.,
st_theme_node_get_margin (group2, ST_SIDE_TOP));
assert_length ("group2", "margin-right", 2.,
st_theme_node_get_margin (group2, ST_SIDE_RIGHT));
assert_length ("group2", "margin-bottom", 3.,
st_theme_node_get_margin (group2, ST_SIDE_BOTTOM));
assert_length ("group2", "margin-left", 4.,
st_theme_node_get_margin (group2, ST_SIDE_LEFT));
/* Test that a 3-sided margin property assigns the right margin to
* all sides */
assert_length ("group4", "margin-top", 1.,
st_theme_node_get_margin (group4, ST_SIDE_TOP));
assert_length ("group4", "margin-right", 2.,
st_theme_node_get_margin (group4, ST_SIDE_RIGHT));
assert_length ("group4", "margin-bottom", 3.,
st_theme_node_get_margin (group4, ST_SIDE_BOTTOM));
assert_length ("group4", "margin-left", 2.,
st_theme_node_get_margin (group4, ST_SIDE_LEFT));
/* Test that a 2-sided margin property assigns the right margin to
* all sides */
assert_length ("group5", "margin-top", 1.,
st_theme_node_get_margin (group5, ST_SIDE_TOP));
assert_length ("group5", "margin-right", 2.,
st_theme_node_get_margin (group5, ST_SIDE_RIGHT));
assert_length ("group5", "margin-bottom", 1.,
st_theme_node_get_margin (group5, ST_SIDE_BOTTOM));
assert_length ("group5", "margin-left", 2.,
st_theme_node_get_margin (group5, ST_SIDE_LEFT));
/* Test that all sides have a margin of 0 when not specified */
assert_length ("group6", "margin-top", 0.,
st_theme_node_get_margin (group6, ST_SIDE_TOP));
assert_length ("group6", "margin-right", 0.,
st_theme_node_get_margin (group6, ST_SIDE_RIGHT));
assert_length ("group6", "margin-bottom", 0.,
st_theme_node_get_margin (group6, ST_SIDE_BOTTOM));
assert_length ("group6", "margin-left", 0.,
st_theme_node_get_margin (group6, ST_SIDE_LEFT));
}
static void
test_border (void)
{
@ -494,16 +426,14 @@ main (int argc, char **argv)
StTheme *theme;
StThemeContext *context;
PangoFontDescription *font_desc;
GFile *file;
gtk_init (&argc, &argv);
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
return 1;
file = g_file_new_for_path ("st/test-theme.css");
theme = st_theme_new (file, NULL, NULL);
g_object_unref (file);
theme = st_theme_new ("st/test-theme.css",
NULL, NULL);
stage = clutter_stage_new ();
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
@ -522,12 +452,6 @@ main (int argc, char **argv)
CLUTTER_TYPE_TEXT, "text2", NULL, NULL, NULL);
group2 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group2", NULL, NULL, NULL);
group4 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group4", NULL, NULL, NULL);
group5 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group5", NULL, NULL, NULL);
group6 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group6", NULL, NULL, NULL);
text3 = st_theme_node_new (context, group2, NULL,
CLUTTER_TYPE_TEXT, "text3", NULL, NULL,
"color: #0000ff; padding-bottom: 12px;");
@ -544,7 +468,6 @@ main (int argc, char **argv)
test_type_inheritance ();
test_adjacent_selector ();
test_padding ();
test_margin ();
test_border ();
test_background ();
test_font ();
@ -555,9 +478,6 @@ main (int argc, char **argv)
g_object_unref (group1);
g_object_unref (group2);
g_object_unref (group3);
g_object_unref (group4);
g_object_unref (group5);
g_object_unref (group6);
g_object_unref (text1);
g_object_unref (text2);
g_object_unref (text3);

View File

@ -7,11 +7,6 @@ stage {
padding-bottom: 2em;
padding-left: 1in;
margin: 12pt;
margin-right: 12px;
margin-bottom: 2em;
margin-left: 1in;
background: #ff0000 url('some-background.png');
}
@ -63,7 +58,6 @@ stage > #text2 {
#group2 {
background-image: url('other-background.png');
padding: 1px 2px 3px 4px;
margin: 1px 2px 3px 4px;
border: 2px solid #000000;
border-bottom: 5px solid #0000ff;
@ -81,15 +75,3 @@ ClutterText:visited, StLabel:visited {
StLabel:boxed {
border: 1px;
}
#group4 {
margin: 1px 2px 3px;
}
#group5 {
margin: 1px 2px;
}
#group6 {
padding: 5px;
}

View File

@ -312,9 +312,6 @@ function test() {
button.label = 'NEVER';
break;
case 'NEVER':
button.label = 'EXTERNAL';
break;
case 'EXTERNAL':
button.label = 'AUTOMATIC';
break;
}

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const St = imports.gi.St;
@ -11,7 +10,7 @@ function init(stage) {
Environment.init();
let context = St.ThemeContext.get_for_stage(stage);
let stylesheetPath = GLib.getenv("GNOME_SHELL_TESTSDIR") + "/testcommon/test.css";
let theme = new St.Theme({ application_stylesheet: Gio.File.new_for_path(stylesheetPath) });
let theme = new St.Theme({ application_stylesheet: stylesheetPath });
context.set_theme(theme);
}

View File

@ -1,4 +1,4 @@
#!/usr/bin/python3
#!/usr/bin/python
#
# 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
@ -16,10 +16,10 @@ os.chdir(srcdir)
status=0
for f in subprocess.Popen(["git", "ls-files"], stdout=subprocess.PIPE).stdout:
f = f.decode('utf-8').strip()
f = f.strip()
if (not os.path.exists(os.path.join(distdir, f)) and
not any((fnmatch.fnmatch(f, p) for p in excludes))):
print("File missing from distribution:", f)
print "File missing from distribution:", f
status=1
sys.exit(status)