Compare commits

..

21 Commits

Author SHA1 Message Date
bf374ccabb nn 2014-06-03 13:51:59 -04:00
02060d2bbc nnn 2014-06-03 13:51:58 -04:00
8750f1edc0 drawer 2014-06-03 13:51:58 -04:00
798f17a97d kill tray 2014-06-03 13:51:57 -04:00
a4091adbf2 system tray elsewhere 2014-06-03 13:51:57 -04:00
ecf795b6ef reveal 2014-06-03 13:51:56 -04:00
75447b249c adjust timeout animation 2014-06-03 13:51:56 -04:00
26d2fb8a37 messageTray: Add a new message tray indicator 2014-06-03 13:51:55 -04:00
f7223763d2 messageTray: Add an indicatorCount property to the tray
So we don't have to do the property tracking here...
2014-06-03 13:51:55 -04:00
0b414308fb telepathyClient: Use a revealer for new messages in Telepathy as well 2014-06-03 13:51:55 -04:00
060917ae2b messageTray: Add a Revealer widget and use it to animate the notification in/out 2014-06-03 13:51:53 -04:00
9f2e5b9b51 messageTray: Glue the notification to the bottom of the screen, always
We'll animate notifications popping up with another system soon enough,
instead. The idea here is that instead of carefully animating the Y
position of the notificationWidget when a notification updates, we
simply animate the height of the new actor inside the notification.
This will fix some of the awkward updates where instead of the
notification content expanding, we see the buttons or action area
pushed off the edge of the screen...

Animations that happen as a result of adding something new to the
notification or expanding it should be done by tweeing the new actors
in inside the notification.
2014-06-03 13:30:46 -04:00
4a07eb77f6 messageTray: Restyle notifications 2014-06-03 13:30:45 -04:00
fbe379c81c messageTray: Considerably rework how layout is done in notifications
Use a series of nested BoxLayouts, Bins, and more instead of an StTable
and a custom ShellGenericContainer, and hacky style classes.

This also removes the customContent parameter in favor of subclasses
setting the child of this._bodyBin instead.

We lose a few of the fancy features like showing the first part of
the body, ellipsized, next the banner when it will fit, and other
layout logic. But since the layout of notifications is changing
substantially anyways, I don't feel too bad...
2014-06-03 13:30:16 -04:00
a07e8bbf37 messageTray: Remove addBody as a public API
As it's unused.
2014-06-03 13:30:16 -04:00
a6aabb1d3a messageTray: Remove support for notifications with images
This sufficiently complicates the code, and won't fit in the
new design.
2014-06-03 13:30:15 -04:00
aef6273fed messageTray: Remove support for resident notifications
Now the only resident notification is a chat notification. The convenient
thing about this special-case behavior is that there's already special-case
code for it and the shell, and we always know that a chat notification will
always be 1:1 with its chat source.
2014-06-03 13:30:15 -04:00
be8b1c7d2d notificationDaemon: Remove support for resident notifications
They're not really an API that has caught on, and not really one
we want to support, either.
2014-06-03 13:30:15 -04:00
14bc748cea notificationDaemon: Remove the special-case hack for system tray icons
Nothing in the system actually has a standard system tray icon anymore,
so this hack isn't necessary.
2014-06-03 13:30:15 -04:00
c32917f6c1 telepathyClient: Remove all the fancy features
This can be done with another app, like Empathy or Chat.
2014-06-03 12:32:56 -04:00
182d45dace autorunManager: Remove the resident "Removable Devices" notification
Users aren't usually the best at obeying the rules, and systems can
deal with hotplug without ejecting first.

https://bugzilla.gnome.org/show_bug.cgi?id=719857
2014-06-03 12:32:56 -04:00
65 changed files with 2758 additions and 5027 deletions

21
NEWS
View File

@ -1,24 +1,3 @@
3.13.3
======
* Don't allow closing windows with attached modals [Florian; #729886]
* Fix self-restarting on OpenBSD [Antoine; #727763]
* Improve behavior of window buttons with compositor menus [Florian; #731058]
* Work around atspi-related performance regression [Alejandro; #730118]
* Misc bug fixes and cleanups [Florian, Lan, Jasper, Christophe, Debarshi,
Zeeshan; #728271, #726460, #703833, #731118, #731220, #695487, #730527,
#728170, #731619, #731738, #731882, #731923]
Contributors:
Zeeshan Ali (Khattak), Christophe Fergeau, Adel Gadllah, Antoine Jacoutot,
Ting-Wei Lan, Florian Müllner, Alejandro Piñeiro, Debarshi Ray,
Carlos Soriano, Jasper St. Pierre, Wim Taymans, Rico Tzschichholz
Translations:
Philip Withnall [en_GB], Milo Casagrande [it], Aurimas Černius [lt],
Enrico Nicoletto [pt_BR], Kjartan Maraas [nb], Balázs Meskó [hu],
Muhammet Kara [tr], Daniel Mustieles [es], Yosef Or Boczko [he],
Matej Urbančič [sl], Mattias Eriksson [sv]
3.13.2
======
* Make airplane mode menu insensitive in lock screen [Giovanni; #729224]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.13.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.13.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -76,7 +76,7 @@ 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.13.3
MUTTER_MIN_VERSION=3.13.2
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3

View File

@ -35,6 +35,7 @@ dist_theme_DATA = \
theme/filter-selected-rtl.svg \
theme/gnome-shell.css \
theme/logged-in-indicator.svg \
theme/menu-arrow-symbolic.svg \
theme/message-tray-background.png \
theme/more-results.svg \
theme/noise-texture.png \

View File

@ -1,4 +1,5 @@
[org.gnome.shell.overrides]
attach-modal-dialogs = /desktop/gnome/shell/windows/attach_modal_dialogs
button-layout = /desktop/gnome/shell/windows/button_layout
edge-tiling = /desktop/gnome/shell/windows/edge_tiling
workspaces-only-on-primary = /desktop/gnome/shell/windows/workspaces_only_on_primary

View File

@ -38,6 +38,7 @@
<method name="Screencast">
<arg type="s" direction="in" name="file_template"/>
<arg type="a{sv}" direction="in" name="options"/>
<arg type="b" direction="in" name="flash"/>
<arg type="b" direction="out" name="success"/>
<arg type="s" direction="out" name="filename_used"/>
</method>

View File

@ -40,10 +40,10 @@
</key>
<key name="app-picker-view" type="u">
<default>0</default>
<_summary>App Picker View</_summary>
<_description>
<summary>App Picker View</summary>
<description>
Index of the currently selected view in the application picker.
</_description>
</description>
</key>
<key name="command-history" type="as">
<default>[]</default>
@ -128,8 +128,8 @@
</key>
<key name="pause-resume-tweens" type="as">
<default>[]</default>
<_summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</_summary>
<_description></_description>
<summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</summary>
<description></description>
</key>
</schema>
@ -175,11 +175,11 @@
gettext-domain="@GETTEXT_PACKAGE@">
<key type="b" name="current-workspace-only">
<default>false</default>
<_summary>Limit switcher to current workspace.</_summary>
<_description>
<summary>Limit switcher to current workspace.</summary>
<description>
If true, only applications that have windows on the current workspace are shown in the switcher.
Otherwise, all applications are included.
</_description>
</description>
</key>
</schema>
@ -202,11 +202,11 @@
</key>
<key type="b" name="current-workspace-only">
<default>true</default>
<_summary>Limit switcher to current workspace.</_summary>
<_description>
<summary>Limit switcher to current workspace.</summary>
<description>
If true, only windows from the current workspace are shown in the switcher.
Otherwise, all windows are included.
</_description>
</description>
</key>
</schema>

View File

@ -414,10 +414,7 @@ StScrollBar StButton#vhandle:active {
/* Buttons */
.candidate-page-button,
.notification-button,
.notification-icon-button,
.hotplug-notification-item,
.hotplug-resident-eject-button,
.modal-dialog-button,
.app-view-control {
border: 1px solid #8b8b8b;
@ -431,17 +428,12 @@ StScrollBar StButton#vhandle:active {
}
.candidate-page-button:hover,
.notification-button:hover,
.notification-icon-button:hover,
.hotplug-notification-item:hover,
.hotplug-resident-eject-button:hover,
.modal-dialog-button:hover {
background-gradient-start: rgba(255, 255, 255, 0.3);
background-gradient-end: rgba(255, 255, 255, 0.1);
}
.notification-button:focus,
.notification-icon-button:focus,
.hotplug-notification-item:focus,
.modal-dialog-button:focus,
.app-view-control:focus {
@ -455,10 +447,7 @@ StScrollBar StButton#vhandle:active {
.candidate-page-button:active,
.candidate-page-button:pressed,
.notification-button:active,
.notification-icon-button:active,
.hotplug-notification-item:active,
.hotplug-resident-eject-button:active,
.modal-dialog-button:active,
.modal-dialog-button:pressed,
.app-view-control:checked {
@ -467,8 +456,6 @@ StScrollBar StButton#vhandle:active {
}
.candidate-page-button:insensitive,
.notification-button:insensitive,
.notification-icon-button:insensitive,
.modal-dialog-button:insensitive {
border-color: #666666;
color: #9f9f9f;
@ -480,7 +467,6 @@ StScrollBar StButton#vhandle:active {
#searchEntry,
.modal-dialog-button,
.notification-button,
.hotplug-notification-item,
.app-view-controls,
#screenShieldNotifications {
@ -1505,105 +1491,85 @@ StScrollBar StButton#vhandle:active {
/* Message Tray */
#message-tray {
background: #2e3436 url(message-tray-background.png);
background-repeat: repeat;
height: 72px;
.notification-drawer {
background: rgba(0,0,0,0.8);
padding: 1em;
border: 2px solid #4c4c4c;
border-bottom: 0px;
border-radius: 6px 6px 0 0;
}
.message-tray-summary {
height: 72px;
.system-tray-icons,
.notification-drawer-footer-actions {
spacing: 0.5em;
}
.message-tray-menu-button StIcon {
padding: 0 20px;
color: #aaaaaa;
icon-size: 24px;
.system-tray-icon-button,
.notification-drawer-button {
border-radius: 4px;
border: 1px solid #4c4c4c;
padding: 4px;
}
.message-tray-menu-button:hover StIcon,
.message-tray-menu-button:active StIcon,
.message-tray-menu-button:focus StIcon {
color: #eeeeee;
.system-tray-icon-button {
width: 22px;
height: 22px;
}
.notification-drawer-button StIcon {
icon-size: 22px;
}
.system-tray-icon-button:hover,
.notification-drawer-button:hover {
background: 1px solid #4c4c4c;
}
.url-highlighter {
link-color: #ccccff;
}
.no-messages-label {
color: #999999;
}
.notification {
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.9);
padding: 8px 8px 4px 8px;
spacing-rows: 4px;
spacing-columns: 10px;
}
.notification, #notification-container {
.notification, #notification-container, .notification-drawer {
font-size: 11pt;
width: 34em;
}
.notification.multi-line-notification {
padding-bottom: 8px;
.notification-main-content {
padding: 8px;
spacing: 8px;
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.8);
}
.notification-unexpanded {
/* We want to force the actor at a specific size, irrespective
of its minimum and preferred size, so we override both */
min-height: 36px;
height: 36px;
.notification-action-area {
padding: 8px;
}
/* We use row-span = 2 for the image cell, which prevents its height preferences to be
taken into account during allocation, so its height ends up being limited by the height
of the content in the other rows. To avoid showing a stretched image, we set the minimum
height of the table to be ICON_SIZE + IMAGE_SIZE + spacing-rows = 24 + 125 + 10 = 159 */
.notification-with-image {
min-height: 159px;
.notification-action-area,
.notification-button {
background: rgba(0,0,0,0.8);
border-top: 1px solid #666;
}
.summary-boxpointer {
-arrow-border-radius: 15px;
-arrow-background-color: rgba(0,0,0,0.9);
-arrow-base: 36px;
-arrow-rise: 18px;
color: white;
-boxpointer-gap: 4px;
.notification-button {
padding: 8px 0px;
border-right: 1px solid #666;
}
.summary-boxpointer .notification {
border-radius: 9px;
background: rgba(0,0,0,0) !important;
padding-bottom: 12px;
.notification-button:hover {
background: rgba(255,255,255,0.3);
}
.summary-boxpointer #summary-right-click-menu {
padding-top: 12px;
padding-bottom: 12px;
.notification-button:active {
background: rgba(255,255,255,0.1);
}
.summary-notification-stack-scrollview {
max-height: 18em;
padding-top: 8px;
padding-bottom: 8px;
.notification-button:last-child {
border-right-width: 0px;
}
.summary-notification-stack-scrollview:ltr {
padding-right: 8px;
}
.summary-notification-stack-scrollview:rtl {
padding-left: 8px;
}
.notification-scrollview {
max-height: 10em;
-st-vfade-offset: 24px;
.notification-title-box {
spacing: 8px;
}
.notification-scrollview:ltr > StScrollBar {
@ -1614,37 +1580,9 @@ StScrollBar StButton#vhandle:active {
padding-right: 6px;
}
.notification-body {
spacing: 5px;
}
.notification-actions {
padding-top: 18px;
spacing: 10px;
}
.notification-button {
-st-natural-width: 140px;
padding: 4px 4px 5px;
}
.notification-button:focus {
-st-natural-width: 138px;
padding: 3px 4px 4px;
}
.notification-icon-button {
border-radius: 5px;
padding: 5px;
}
.notification-icon-button:focus {
padding: 4px;
}
.notification-icon-button > StIcon {
icon-size: 16px;
padding: 8px;
.notification-scrollview {
max-height: 10em;
-st-vfade-offset: 24px;
}
.secondary-icon {
@ -1669,45 +1607,6 @@ StScrollBar StButton#vhandle:active {
padding: 2px 5px;
}
.hotplug-resident-box {
spacing: 8px;
}
.hotplug-resident-mount {
spacing: 8px;
border-radius: 4px;
color: #ccc;
}
.hotplug-resident-mount:hover {
background-gradient-direction: horizontal;
background-gradient-start: rgba(255, 255, 255, 0.1);
background-gradient-end: rgba(255, 255, 255, 0);
color: #fff;
}
.hotplug-resident-mount-label {
color: inherit;
padding-left: 6px;
}
.hotplug-resident-mount-icon {
icon-size: 24px;
padding-left: 6px;
}
.hotplug-resident-eject-icon {
icon-size: 16px;
}
.hotplug-resident-eject-button {
padding: 7px;
border-radius: 5px;
color: #ccc;
}
.chat-log-message {
color: #888888;
}
@ -1747,7 +1646,11 @@ StScrollBar StButton#vhandle:active {
padding-right: 4px;
}
.chat-notification-scrollview{
.chat-notification-body-box {
spacing: 5px;
}
.chat-notification-scrollview {
max-height: 22em;
}
@ -1797,6 +1700,28 @@ StScrollBar StButton#vhandle:active {
-shell-counter-overlap-y: 13px;
}
.message-tray-indicator {
spacing: 4px;
}
.message-tray-indicator-count {
font-size: 1.2em;
font-weight: bold;
color: black;
background-color: rgba(255, 255, 255, 0.7);
border-radius: 1em;
padding: 1em;
text-align: center;
}
.message-tray-indicator-glow {
height: 4px;
background-gradient-start: rgba(255, 255, 255, 0);
background-gradient-end: rgba(255, 255, 255, 1);
background-gradient-direction: vertical;
}
/* OSD */
.osd-window {
text-align: center;
@ -2666,8 +2591,7 @@ StScrollBar StButton#vhandle:active {
padding-bottom: 0px;
}
#screenShieldNotifications .notification-button,
#screenShieldNotifications .notification-icon-button {
#screenShieldNotifications .notification-button {
border: 1px rgba(255,255,255,0.5);
}

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg3863"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="menu-arrow.svg">
<defs
id="defs3865" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="15.836083"
inkscape:cx="-3.1641676"
inkscape:cy="11.823817"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1366"
inkscape:window-height="702"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:snap-bbox="true">
<sodipodi:guide
orientation="1,0"
position="15.996443,16.922964"
id="guide3873" />
<sodipodi:guide
orientation="0,1"
position="28.041217,3.1256134"
id="guide3875" />
<sodipodi:guide
orientation="0,1"
position="-0.80372916,24.469088"
id="guide3877" />
<sodipodi:guide
orientation="1,0"
position="3.0363102,34.649657"
id="guide3879" />
<sodipodi:guide
orientation="1,0"
position="29.023553,28.577037"
id="guide3881" />
<inkscape:grid
type="xygrid"
id="grid2988" />
</sodipodi:namedview>
<metadata
id="metadata3868">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-16)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 4,23 8,0 -4,5 z"
id="path3883"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -278,7 +278,7 @@ const ExtensionRow = new Lang.Class({
this.uuid = uuid;
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
this._settings = new Gio.Settings({ schema: 'org.gnome.shell' });
this._settings.connect('changed::enabled-extensions', Lang.bind(this,
function() {
this._switch.state = this._isEnabled();

View File

@ -382,7 +382,7 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._onTimedLoginRequested));
}
this._settings = new Gio.Settings({ schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
Lang.bind(this, this._updateBanner));

View File

@ -128,7 +128,7 @@ const ShellUserVerifier = new Lang.Class({
this._client = client;
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._settings = new Gio.Settings({ schema: LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed',
Lang.bind(this, this._updateDefaultService));
this._updateDefaultService();

View File

@ -367,7 +367,7 @@ const WindowSwitcherPopup = new Lang.Class({
_init: function(items) {
this.parent(items);
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
},
_getWindowList: function() {
@ -456,7 +456,7 @@ const AppSwitcher = new Lang.Class({
this._arrows = [];
let windowTracker = Shell.WindowTracker.get_default();
let settings = new Gio.Settings({ schema_id: 'org.gnome.shell.app-switcher' });
let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' });
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
: null;
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace);

View File

@ -16,7 +16,6 @@ const Atk = imports.gi.Atk;
const AppFavorites = imports.ui.appFavorites;
const BoxPointer = imports.ui.boxpointer;
const DND = imports.ui.dnd;
const GrabHelper = imports.ui.grabHelper;
const IconGrid = imports.ui.iconGrid;
const Main = imports.ui.main;
const Overview = imports.ui.overview;
@ -371,7 +370,7 @@ const AllView = new Lang.Class({
Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, function() {
Main.queueDeferredWork(this._redisplayWorkId);
}));
this._folderSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
this._folderSettings = new Gio.Settings({ schema: 'org.gnome.desktop.app-folders' });
this._folderSettings.connect('changed::folder-children', Lang.bind(this, function() {
Main.queueDeferredWork(this._redisplayWorkId);
}));
@ -741,7 +740,7 @@ const AppDisplay = new Lang.Class({
Name: 'AppDisplay',
_init: function() {
this._privacySettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.privacy' });
this._privacySettings = new Gio.Settings({ schema: 'org.gnome.desktop.privacy' });
this._privacySettings.connect('changed::remember-app-usage',
Lang.bind(this, this._updateFrequentVisibility));
@ -953,7 +952,6 @@ const FolderView = new Lang.Class({
let subSize = Math.floor(FOLDER_SUBICON_FRACTION * size);
let numItems = this._allItems.length;
let rtl = icon.get_text_direction() == Clutter.TextDirection.RTL;
for (let i = 0; i < 4; i++) {
let bin;
if (i < numItems) {
@ -962,7 +960,7 @@ const FolderView = new Lang.Class({
} else {
bin = new St.Bin({ width: subSize, height: subSize });
}
layout.pack(bin, rtl ? (i + 1) % 2 : i % 2, Math.floor(i / 2));
layout.pack(bin, i % 2, Math.floor(i / 2));
}
return icon;
@ -1251,8 +1249,18 @@ const AppFolderPopup = new Lang.Class({
function() {
this.actor.destroy();
}));
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
this._grabHelper.addActor(Main.layoutManager.overviewGroup);
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
},
_onKeyPress: function(actor, event) {
if (!this._isOpen)
return Clutter.EVENT_PROPAGATE;
if (event.get_key_symbol() != Clutter.KEY_Escape)
return Clutter.EVENT_PROPAGATE;
this.popdown();
return Clutter.EVENT_STOP;
},
toggle: function() {
@ -1266,12 +1274,6 @@ const AppFolderPopup = new Lang.Class({
if (this._isOpen)
return;
this._isOpen = this._grabHelper.grab({ actor: this.actor,
onUngrab: Lang.bind(this, this.popdown) });
if (!this._isOpen)
return;
this.actor.show();
this._boxPointer.setArrowActor(this._source.actor);
@ -1280,6 +1282,7 @@ const AppFolderPopup = new Lang.Class({
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
this._isOpen = true;
this.emit('open-state-changed', true);
},
@ -1287,8 +1290,6 @@ const AppFolderPopup = new Lang.Class({
if (!this._isOpen)
return;
this._grabHelper.ungrab({ actor: this.actor });
this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
BoxPointer.PopupAnimation.SLIDE);
this._isOpen = false;

View File

@ -725,7 +725,7 @@ const BackgroundManager = new Lang.Class({
controlPosition: true,
settingsSchema: BACKGROUND_SCHEMA });
this._settings = new Gio.Settings({ schema_id: params.settingsSchema });
this._settings = new Gio.Settings({ schema: params.settingsSchema });
this._container = params.container;
this._layoutManager = params.layoutManager;
this._effects = params.effects;

View File

@ -383,7 +383,7 @@ const Calendar = new Lang.Class({
_init: function() {
this._weekStart = Shell.util_get_week_start();
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.calendar' });
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.calendar' });
this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange));
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
@ -480,11 +480,7 @@ const Calendar = new Lang.Class({
let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay());
let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading',
text: customDayAbbrev });
let col;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL)
col = 6 - (7 + iter.getDay() - this._weekStart) % 7;
else
col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
let col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
layout.pack(label, col, 1);
iter.setTime(iter.getTime() + MSECS_IN_DAY);
}
@ -652,11 +648,7 @@ const Calendar = new Lang.Class({
button.style_class = styleClass;
let offsetCols = this._useWeekdate ? 1 : 0;
let col;
if (rtl)
col = 6 - (7 + iter.getDay() - this._weekStart) % 7;
else
col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
let col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
layout.pack(button, col, row);
this._buttons.push(button);
@ -664,7 +656,7 @@ const Calendar = new Lang.Class({
if (this._useWeekdate && iter.getDay() == 4) {
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
style_class: 'calendar-day-base calendar-week-number'});
layout.pack(label, rtl ? 7 : 0, row);
layout.pack(label, 0, row);
}
iter.setTime(iter.getTime() + MSECS_IN_DAY);
@ -712,7 +704,7 @@ const EventsList = new Lang.Class({
layout_manager: layout });
layout.hookup_style(this.actor);
this._date = new Date();
this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
this._weekStart = Shell.util_get_week_start();
},
@ -734,10 +726,8 @@ const EventsList = new Lang.Class({
dayLabel.clutter_text.line_wrap = false;
dayLabel.clutter_text.ellipsize = false;
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
let layout = this.actor.layout_manager;
layout.pack(dayLabel, rtl ? 2 : 0, index);
layout.pack(dayLabel, 0, index);
layout.child_set(dayLabel, { x_expand: false,
x_align: Clutter.TableAlignment.END,
y_align: Clutter.TableAlignment.START });
@ -758,7 +748,7 @@ const EventsList = new Lang.Class({
titleLabel.clutter_text.line_wrap = true;
titleLabel.clutter_text.ellipsize = false;
layout.pack(titleLabel, rtl ? 0 : 2, index);
layout.pack(titleLabel, 2, index);
layout.child_set(titleLabel, { x_expand: true });
},

View File

@ -23,7 +23,7 @@ const AutomountManager = new Lang.Class({
Name: 'AutomountManager',
_init: function() {
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
this._volumeQueue = [];
this._session = new GnomeSession.SessionManager();
this._session.connectSignal('InhibitorAdded',

View File

@ -96,7 +96,7 @@ const ContentTypeDiscoverer = new Lang.Class({
_init: function(callback) {
this._callback = callback;
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
},
guessContentTypes: function(mount) {
@ -170,17 +170,6 @@ const AutorunManager = new Lang.Class({
this._transDispatcher = new AutorunTransientDispatcher(this);
},
_ensureResidentSource: function() {
if (this._residentSource)
return;
this._residentSource = new AutorunResidentSource(this);
let destroyId = this._residentSource.connect('destroy', Lang.bind(this, function() {
this._residentSource.disconnect(destroyId);
this._residentSource = null;
}));
},
enable: function() {
this._scanMounts();
@ -189,17 +178,12 @@ const AutorunManager = new Lang.Class({
},
disable: function() {
if (this._residentSource)
this._residentSource.destroy();
this._volumeMonitor.disconnect(this._mountAddedId);
this._volumeMonitor.disconnect(this._mountRemovedId);
},
_processMount: function(mount, hotplug) {
let discoverer = new ContentTypeDiscoverer(Lang.bind(this, function(mount, apps, contentTypes) {
this._ensureResidentSource();
this._residentSource.addMount(mount, apps);
if (hotplug)
this._transDispatcher.addMount(mount, apps, contentTypes);
}));
@ -224,8 +208,6 @@ const AutorunManager = new Lang.Class({
_onMountRemoved: function(monitor, mount) {
this._transDispatcher.removeMount(mount);
if (this._residentSource)
this._residentSource.removeMount(mount);
},
ejectMount: function(mount) {
@ -288,160 +270,13 @@ const AutorunManager = new Lang.Class({
},
});
const AutorunResidentSource = new Lang.Class({
Name: 'AutorunResidentSource',
Extends: MessageTray.Source,
_init: function(manager) {
this.parent(_("Removable Devices"), 'media-removable');
this.resident = true;
this._mounts = [];
this._manager = manager;
this._notification = new AutorunResidentNotification(this._manager, this);
},
_createPolicy: function() {
return new MessageTray.NotificationPolicy({ showInLockScreen: false });
},
buildRightClickMenu: function() {
return null;
},
addMount: function(mount, apps) {
if (!shouldAutorunMount(mount, false))
return;
let filtered = this._mounts.filter(function (element) {
return (element.mount == mount);
});
if (filtered.length != 0)
return;
let element = { mount: mount, apps: apps };
this._mounts.push(element);
this._redisplay();
},
removeMount: function(mount) {
this._mounts =
this._mounts.filter(function (element) {
return (element.mount != mount);
});
this._redisplay();
},
_redisplay: function() {
if (this._mounts.length == 0) {
this._notification.destroy();
this.destroy();
return;
}
this._notification.updateForMounts(this._mounts);
// add ourselves as a source, and push the notification
if (!Main.messageTray.contains(this)) {
Main.messageTray.add(this);
this.pushNotification(this._notification);
}
}
});
const AutorunResidentNotification = new Lang.Class({
Name: 'AutorunResidentNotification',
Extends: MessageTray.Notification,
_init: function(manager, source) {
this.parent(source, source.title, null, { customContent: true });
// set the notification as resident
this.setResident(true);
this._layout = new St.BoxLayout ({ style_class: 'hotplug-resident-box',
vertical: true });
this._manager = manager;
this.addActor(this._layout,
{ x_expand: true,
x_fill: true });
},
updateForMounts: function(mounts) {
// remove all the layout content
this._layout.destroy_all_children();
for (let idx = 0; idx < mounts.length; idx++) {
let element = mounts[idx];
let actor = this._itemForMount(element.mount, element.apps);
this._layout.add(actor, { x_fill: true,
expand: true });
}
},
_itemForMount: function(mount, apps) {
let item = new St.BoxLayout();
// prepare the mount button content
let mountLayout = new St.BoxLayout();
let mountIcon = new St.Icon({ gicon: mount.get_icon(),
style_class: 'hotplug-resident-mount-icon' });
mountLayout.add_actor(mountIcon);
let labelBin = new St.Bin({ y_align: St.Align.MIDDLE });
let mountLabel =
new St.Label({ text: mount.get_name(),
style_class: 'hotplug-resident-mount-label',
track_hover: true,
reactive: true });
labelBin.add_actor(mountLabel);
mountLayout.add_actor(labelBin);
let mountButton = new St.Button({ child: mountLayout,
x_align: St.Align.START,
x_fill: true,
style_class: 'hotplug-resident-mount',
button_mask: St.ButtonMask.ONE });
item.add(mountButton, { x_align: St.Align.START,
expand: true });
let ejectIcon =
new St.Icon({ icon_name: 'media-eject-symbolic',
style_class: 'hotplug-resident-eject-icon' });
let ejectButton =
new St.Button({ style_class: 'hotplug-resident-eject-button',
button_mask: St.ButtonMask.ONE,
child: ejectIcon });
item.add(ejectButton, { x_align: St.Align.END });
// now connect signals
mountButton.connect('clicked', Lang.bind(this, function(actor, event) {
startAppForMount(apps[0], mount);
}));
ejectButton.connect('clicked', Lang.bind(this, function() {
this._manager.ejectMount(mount);
}));
return item;
},
});
const AutorunTransientDispatcher = new Lang.Class({
Name: 'AutorunTransientDispatcher',
_init: function(manager) {
this._manager = manager;
this._sources = [];
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
},
_getAutorunSettingForType: function(contentType) {
@ -559,12 +394,12 @@ const AutorunTransientNotification = new Lang.Class({
Extends: MessageTray.Notification,
_init: function(manager, source) {
this.parent(source, source.title, null, { customContent: true });
this.parent(source, source.title);
this._manager = manager;
this._box = new St.BoxLayout({ style_class: 'hotplug-transient-box',
vertical: true });
this.addActor(this._box);
this._bodyBin.child = this._box;
this._mount = source.mount;

View File

@ -77,7 +77,6 @@ const NetworkSecretDialog = new Lang.Class({
layout_manager: layout });
layout.hookup_style(secretTable);
let rtl = secretTable.get_text_direction() == Clutter.TextDirection.RTL;
let initialFocusSet = false;
let pos = 0;
for (let i = 0; i < this._content.secrets.length; i++) {
@ -117,15 +116,10 @@ const NetworkSecretDialog = new Lang.Class({
} else
secret.valid = true;
if (rtl) {
layout.pack(secret.entry, 0, pos);
layout.pack(label, 1, pos);
} else {
layout.pack(label, 0, pos);
layout.pack(secret.entry, 1, pos);
}
layout.pack(label, 0, pos);
layout.child_set(label, { x_expand: false, y_fill: false,
x_align: Clutter.TableAlignment.START });
layout.pack(secret.entry, 1, pos);
pos++;
if (secret.password)

View File

@ -102,15 +102,6 @@ const TelepathyClient = new Lang.Class({
this._tpClient.set_handle_channels_func(
Lang.bind(this, this._handleChannels));
// Watch subscription requests and connection errors
this._subscriptionSource = null;
this._accountSource = null;
// Workaround for gjs not supporting GPtrArray in signals.
// See BGO bug #653941 for context.
this._tpClient.set_contact_list_changed_func(
Lang.bind(this, this._contactListChanged));
// Allow other clients (such as Empathy) to pre-empt our channels if
// needed
this._tpClient.set_delegated_channels_callback(
@ -124,17 +115,12 @@ const TelepathyClient = new Lang.Class({
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
}
this._accountManagerValidityChangedId = this._accountManager.connect('account-validity-changed',
Lang.bind(this, this._accountValidityChanged));
if (!this._accountManager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
this._accountManager.prepare_async(null, Lang.bind(this, this._accountManagerPrepared));
},
disable: function() {
this._tpClient.unregister();
this._accountManager.disconnect(this._accountManagerValidityChangedId);
this._accountManagerValidityChangedId = 0;
},
_observeChannels: function(observer, account, conn, channels,
@ -219,33 +205,6 @@ const TelepathyClient = new Lang.Class({
}
},
_displayRoomInvitation: function(conn, channel, dispatchOp, context) {
// We can only approve the rooms if we have been invited to it
let selfContact = channel.group_get_self_contact();
if (selfContact == null) {
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
message: 'Not invited to the room' }));
return;
}
let [invited, inviter, reason, msg] = channel.group_get_local_pending_contact_info(selfContact);
if (!invited) {
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
message: 'Not invited to the room' }));
return;
}
// FIXME: We don't have a 'chat room' icon (bgo #653737) use
// system-users for now as Empathy does.
let source = new ApproverSource(dispatchOp, _("Invitation"),
Gio.icon_new_for_string('system-users'));
Main.messageTray.add(source);
let notif = new RoomInviteNotification(source, dispatchOp, channel, inviter);
source.notify(notif);
context.accept();
},
_approveChannels: function(approver, account, conn, channels,
dispatchOp, context) {
let channel = channels[0];
@ -259,10 +218,6 @@ const TelepathyClient = new Lang.Class({
if (chanType == Tp.IFACE_CHANNEL_TYPE_TEXT)
this._approveTextChannel(account, conn, channel, dispatchOp, context);
else if (chanType == Tp.IFACE_CHANNEL_TYPE_CALL)
this._approveCall(account, conn, channel, dispatchOp, context);
else if (chanType == Tp.IFACE_CHANNEL_TYPE_FILE_TRANSFER)
this._approveFileTransfer(account, conn, channel, dispatchOp, context);
else
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
message: 'Unsupported channel type' }));
@ -283,45 +238,9 @@ const TelepathyClient = new Lang.Class({
}}));
context.accept();
} else {
this._displayRoomInvitation(conn, channel, dispatchOp, context);
}
},
_approveCall: function(account, conn, channel, dispatchOp, context) {
let isVideo = false;
let props = channel.borrow_immutable_properties();
if (props[Tp.PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO])
isVideo = true;
// We got the TpContact
let source = new ApproverSource(dispatchOp, _("Call"), isVideo ?
Gio.icon_new_for_string('camera-web') :
Gio.icon_new_for_string('audio-input-microphone'));
Main.messageTray.add(source);
let notif = new AudioVideoNotification(source, dispatchOp, channel,
channel.get_target_contact(), isVideo);
source.notify(notif);
context.accept();
},
_approveFileTransfer: function(account, conn, channel, dispatchOp, context) {
// Use the icon of the file being transferred
let gicon = Gio.content_type_get_icon(channel.get_mime_type());
// We got the TpContact
let source = new ApproverSource(dispatchOp, _("File Transfer"), gicon);
Main.messageTray.add(source);
let notif = new FileTransferNotification(source, dispatchOp, channel,
channel.get_target_contact());
source.notify(notif);
context.accept();
},
_delegatedChannelsCb: function(client, channels) {
// Nothing to do as we don't make a distinction between observed and
// handled channels.
@ -329,105 +248,7 @@ const TelepathyClient = new Lang.Class({
_accountManagerPrepared: function(am, result) {
am.prepare_finish(result);
let accounts = am.get_valid_accounts();
for (let i = 0; i < accounts.length; i++) {
this._accountValidityChanged(am, accounts[i], true);
}
},
_accountValidityChanged: function(am, account, valid) {
if (!valid)
return;
// It would be better to connect to "status-changed" but we cannot.
// See discussion in https://bugzilla.gnome.org/show_bug.cgi?id=654159
account.connect("notify::connection-status",
Lang.bind(this, this._accountConnectionStatusNotifyCb));
account.connect('notify::connection',
Lang.bind(this, this._connectionChanged));
this._connectionChanged(account);
},
_connectionChanged: function(account) {
let conn = account.get_connection();
if (conn == null)
return;
this._tpClient.grab_contact_list_changed(conn);
if (conn.get_contact_list_state() == Tp.ContactListState.SUCCESS) {
this._contactListChanged(conn, conn.dup_contact_list(), []);
}
},
_contactListChanged: function(conn, added, removed) {
for (let i = 0; i < added.length; i++) {
let contact = added[i];
contact.connect('subscription-states-changed',
Lang.bind(this, this._subscriptionStateChanged));
this._subscriptionStateChanged(contact);
}
},
_subscriptionStateChanged: function(contact) {
if (contact.get_publish_state() != Tp.SubscriptionState.ASK)
return;
/* Implicitly accept publish requests if contact is already subscribed */
if (contact.get_subscribe_state() == Tp.SubscriptionState.YES ||
contact.get_subscribe_state() == Tp.SubscriptionState.ASK) {
contact.authorize_publication_async(function(src, result) {
src.authorize_publication_finish(result)});
return;
}
/* Display notification to ask user to accept/reject request */
let source = this._ensureAppSource();
let notif = new SubscriptionRequestNotification(source, contact);
source.notify(notif);
},
_accountConnectionStatusNotifyCb: function(account) {
let connectionError = account.connection_error;
if (account.connection_status != Tp.ConnectionStatus.DISCONNECTED ||
connectionError == Tp.error_get_dbus_name(Tp.Error.CANCELLED)) {
return;
}
let notif = this._accountNotifications[account.get_object_path()];
if (notif)
return;
/* Display notification that account failed to connect */
let source = this._ensureAppSource();
notif = new AccountNotification(source, account, connectionError);
this._accountNotifications[account.get_object_path()] = notif;
notif.connect('destroy', Lang.bind(this, function() {
delete this._accountNotifications[account.get_object_path()];
}));
source.notify(notif);
},
_ensureAppSource: function() {
if (this._appSource == null) {
this._appSource = new MessageTray.Source(_("Chat"), 'empathy');
this._appSource.policy = new MessageTray.NotificationApplicationPolicy('empathy');
Main.messageTray.add(this._appSource);
this._appSource.connect('destroy', Lang.bind(this, function () {
this._appSource = null;
}));
}
return this._appSource;
}
});
const ChatSource = new Lang.Class({
@ -545,7 +366,7 @@ const ChatSource = new Lang.Class({
_updateAvatarIcon: function() {
this.iconUpdated();
this._notification.update(this._notification.title, null, { customContent: true });
this._notification.update(this._notification.title);
},
open: function() {
@ -737,7 +558,7 @@ const ChatSource = new Lang.Class({
title = GLib.markup_escape_text(this.title, -1);
this._notification.update(this._notification.title, null, { customContent: true, secondaryGIcon: this.getSecondaryIcon() });
this._notification.update(this._notification.title, null, { secondaryGIcon: this.getSecondaryIcon() });
if (message)
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
@ -764,8 +585,7 @@ const ChatNotification = new Lang.Class({
Extends: MessageTray.Notification,
_init: function(source) {
this.parent(source, source.title, null, { customContent: true, secondaryGIcon: source.getSecondaryIcon() });
this.setResident(true);
this.parent(source, source.title, null, { secondaryGIcon: source.getSecondaryIcon() });
this._responseEntry = new St.Entry({ style_class: 'chat-response',
can_focus: true });
@ -781,15 +601,17 @@ const ChatNotification = new Lang.Class({
this.emit('unfocused');
}));
this._createScrollArea();
this._lastGroup = null;
this._bodyBox = new St.BoxLayout({ style_class: 'chat-notification-body-box' });
this._bodyBin.child = this._bodyBox;
// Keep track of the bottom position for the current adjustment and
// force a scroll to the bottom if things change while we were at the
// bottom
this._oldMaxScrollValue = this._scrollArea.vscroll.adjustment.value;
this._scrollArea.add_style_class_name('chat-notification-scrollview');
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
this._oldMaxScrollValue = this._bodyScrollArea.vscroll.adjustment.value;
this._bodyScrollArea.add_style_class_name('chat-notification-scrollview');
this._bodyScrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
if (adjustment.value == this._oldMaxScrollValue)
this.scrollTo(St.Side.BOTTOM);
this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size);
@ -826,8 +648,7 @@ const ChatNotification = new Lang.Class({
}
if (message.direction == NotificationDirection.RECEIVED) {
this.update(this.source.title, messageBody, { customContent: true,
bannerMarkup: true });
this.update(this.source.title, messageBody, { bannerMarkup: true });
}
let group = (message.direction == NotificationDirection.RECEIVED ?
@ -864,7 +685,7 @@ const ChatNotification = new Lang.Class({
expired[i].actor.destroy();
}
let groups = this._contentArea.get_children();
let groups = this._bodyBox.get_children();
for (let i = 0; i < groups.length; i++) {
let group = groups[i];
if (group.get_n_children() == 0)
@ -896,9 +717,9 @@ const ChatNotification = new Lang.Class({
if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId);
let highlighter = new MessageTray.URLHighlighter(props.body,
true, // line wrap?
true); // allow markup?
let highlighter = new MessageTray.URLHighlighter();
highlighter.actor.clutter_text.line_wrap = true;
highlighter.setMarkup(props.body, true);
let body = highlighter.actor;
@ -910,14 +731,16 @@ const ChatNotification = new Lang.Class({
if (group != this._lastGroup) {
this._lastGroup = group;
let emptyLine = new St.Label({ style_class: 'chat-empty-line' });
this.addActor(emptyLine);
this._bodyBox.add_child(emptyLine);
}
this._lastMessageBox = new St.BoxLayout({ vertical: false });
this._lastMessageBox.add(body, props.childProps);
this.addActor(this._lastMessageBox);
this.updated();
let revealer = new MessageTray.Revealer(body);
this._lastMessageBox.add(revealer, props.childProps);
revealer.show(true);
this._bodyBox.add_child(this._lastMessageBox);
let timestamp = props.timestamp;
this._history.unshift({ actor: body, time: timestamp,
@ -946,7 +769,7 @@ const ChatNotification = new Lang.Class({
let format;
let desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
let hasAmPm = date.toLocaleFormat('%p') != '';
@ -1052,7 +875,7 @@ const ChatNotification = new Lang.Class({
group: 'meta',
styles: ['chat-meta-message'] });
this.update(newAlias, null, { customContent: true });
this.update(newAlias);
this._filterMessages();
},
@ -1105,359 +928,4 @@ const ChatNotification = new Lang.Class({
}
});
const ApproverSource = new Lang.Class({
Name: 'ApproverSource',
Extends: MessageTray.Source,
_init: function(dispatchOp, text, gicon) {
this._gicon = gicon;
this.parent(text);
this._dispatchOp = dispatchOp;
// Destroy the source if the channel dispatch operation is invalidated
// as we can't approve any more.
this._invalidId = dispatchOp.connect('invalidated',
Lang.bind(this, function(domain, code, msg) {
this.destroy();
}));
},
_createPolicy: function() {
return new MessageTray.NotificationApplicationPolicy('empathy');
},
destroy: function() {
if (this._invalidId != 0) {
this._dispatchOp.disconnect(this._invalidId);
this._invalidId = 0;
}
this.parent();
},
getIcon: function() {
return this._gicon;
}
});
const RoomInviteNotification = new Lang.Class({
Name: 'RoomInviteNotification',
Extends: MessageTray.Notification,
_init: function(source, dispatchOp, channel, inviter) {
this.parent(source,
/* translators: argument is a room name like
* room@jabber.org for example. */
_("Invitation to %s").format(channel.get_identifier()),
null,
{ customContent: true });
this.setResident(true);
/* 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. */
this.addBody(_("%s is inviting you to join %s").format(inviter.get_alias(), channel.get_identifier()));
this.addAction(_("Decline"), Lang.bind(this, function() {
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
src.leave_channels_finish(result);
});
this.destroy();
}));
this.addAction(_("Accept"), Lang.bind(this, function() {
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
src.handle_with_time_finish(result);
});
this.destroy();
}));
}
});
// Audio Video
const AudioVideoNotification = new Lang.Class({
Name: 'AudioVideoNotification',
Extends: MessageTray.Notification,
_init: function(source, dispatchOp, channel, contact, isVideo) {
let title = '';
if (isVideo)
/* translators: argument is a contact name like Alice for example. */
title = _("Video call from %s").format(contact.get_alias());
else
/* translators: argument is a contact name like Alice for example. */
title = _("Call from %s").format(contact.get_alias());
this.parent(source, title, null, { customContent: true });
this.setResident(true);
this.setUrgency(MessageTray.Urgency.CRITICAL);
this.addAction(_("Decline"), Lang.bind(this, function() {
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
src.leave_channels_finish(result);
});
this.destroy();
}));
/* translators: this is a button label (verb), not a noun */
this.addAction(_("Answer"), Lang.bind(this, function() {
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
src.handle_with_time_finish(result);
});
this.destroy();
}));
}
});
// File Transfer
const FileTransferNotification = new Lang.Class({
Name: 'FileTransferNotification',
Extends: MessageTray.Notification,
_init: function(source, dispatchOp, channel, contact) {
this.parent(source,
/* To translators: The first parameter is
* the contact's alias and the second one is the
* file name. The string will be something
* like: "Alice is sending you test.ogg"
*/
_("%s is sending you %s").format(contact.get_alias(),
channel.get_filename()),
null,
{ customContent: true });
this.setResident(true);
this.addAction(_("Decline"), Lang.bind(this, function() {
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
src.leave_channels_finish(result);
});
this.destroy();
}));
this.addAction(_("Accept"), Lang.bind(this, function() {
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
src.handle_with_time_finish(result);
});
this.destroy();
}));
}
});
// Subscription request
const SubscriptionRequestNotification = new Lang.Class({
Name: 'SubscriptionRequestNotification',
Extends: MessageTray.Notification,
_init: function(source, contact) {
this.parent(source,
/* To translators: The parameter is the contact's alias */
_("%s would like permission to see when you are online").format(contact.get_alias()),
null, { customContent: true });
this._contact = contact;
this._connection = contact.get_connection();
let layout = new St.BoxLayout({ vertical: false });
// Display avatar
let iconBox = new St.Bin({ style_class: 'avatar-box' });
iconBox._size = 48;
let textureCache = St.TextureCache.get_default();
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_uri_async(uri, iconBox._size, iconBox._size, scaleFactor);
}
else {
iconBox.child = new St.Icon({ icon_name: 'avatar-default',
icon_size: iconBox._size });
}
layout.add(iconBox);
// subscription request message
let label = new St.Label({ style_class: 'subscription-message',
text: contact.get_publish_request() });
layout.add(label);
this.addActor(layout);
this.addAction(_("Decline"), Lang.bind(this, function() {
contact.remove_async(function(src, result) {
src.remove_finish(result);
});
}));
this.addAction(_("Accept"), Lang.bind(this, function() {
// Authorize the contact and request to see his status as well
contact.authorize_publication_async(function(src, result) {
src.authorize_publication_finish(result);
});
contact.request_subscription_async('', function(src, result) {
src.request_subscription_finish(result);
});
}));
this._changedId = contact.connect('subscription-states-changed',
Lang.bind(this, this._subscriptionStatesChangedCb));
this._invalidatedId = this._connection.connect('invalidated',
Lang.bind(this, this.destroy));
},
destroy: function() {
if (this._changedId != 0) {
this._contact.disconnect(this._changedId);
this._changedId = 0;
}
if (this._invalidatedId != 0) {
this._connection.disconnect(this._invalidatedId);
this._invalidatedId = 0;
}
this.parent();
},
_subscriptionStatesChangedCb: function(contact, subscribe, publish, msg) {
// Destroy the notification if the subscription request has been
// answered
if (publish != Tp.SubscriptionState.ASK)
this.destroy();
}
});
// Messages from empathy/libempathy/empathy-utils.c
// create_errors_to_message_hash()
/* Translator note: these should be the same messages that are
* used in Empathy, so just copy and paste from there. */
let _connectionErrorMessages = {};
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.NETWORK_ERROR)]
= _("Network error");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.AUTHENTICATION_FAILED)]
= _("Authentication failed");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ENCRYPTION_ERROR)]
= _("Encryption error");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_NOT_PROVIDED)]
= _("Certificate not provided");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_UNTRUSTED)]
= _("Certificate untrusted");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_EXPIRED)]
= _("Certificate expired");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_NOT_ACTIVATED)]
= _("Certificate not activated");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_HOSTNAME_MISMATCH)]
= _("Certificate hostname mismatch");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_FINGERPRINT_MISMATCH)]
= _("Certificate fingerprint mismatch");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_SELF_SIGNED)]
= _("Certificate self-signed");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CANCELLED)]
= _("Status is set to offline");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ENCRYPTION_NOT_AVAILABLE)]
= _("Encryption is not available");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_INVALID)]
= _("Certificate is invalid");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_REFUSED)]
= _("Connection has been refused");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_FAILED)]
= _("Connection can't be established");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_LOST)]
= _("Connection has been lost");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ALREADY_CONNECTED)]
= _("This account is already connected to the server");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_REPLACED)]
= _("Connection has been replaced by a new connection using the same resource");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.REGISTRATION_EXISTS)]
= _("The account already exists on the server");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.SERVICE_BUSY)]
= _("Server is currently too busy to handle the connection");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_REVOKED)]
= _("Certificate has been revoked");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_INSECURE)]
= _("Certificate uses an insecure cipher algorithm or is cryptographically weak");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_LIMIT_EXCEEDED)]
= _("The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library");
_connectionErrorMessages['org.freedesktop.DBus.Error.NoReply']
= _("Internal error");
const AccountNotification = new Lang.Class({
Name: 'AccountNotification',
Extends: MessageTray.Notification,
_init: function(source, account, connectionError) {
this.parent(source,
/* translators: argument is the account name, like
* name@jabber.org for example. */
_("Unable to connect to %s").format(account.get_display_name()),
this._getMessage(connectionError));
this._account = account;
this.addAction(_("View account"), Lang.bind(this, function() {
let cmd = 'empathy-accounts --select-account=' +
account.get_path_suffix();
let app_info = Gio.app_info_create_from_commandline(cmd, null, 0);
app_info.launch([], global.create_app_launch_context(0, -1));
}));
this._enabledId = account.connect('notify::enabled',
Lang.bind(this, function() {
if (!account.is_enabled())
this.destroy();
}));
this._invalidatedId = account.connect('invalidated',
Lang.bind(this, this.destroy));
this._connectionStatusId = account.connect('notify::connection-status',
Lang.bind(this, function() {
let status = account.connection_status;
if (status == Tp.ConnectionStatus.CONNECTED) {
this.destroy();
} else if (status == Tp.ConnectionStatus.DISCONNECTED) {
let connectionError = account.connection_error;
if (connectionError == Tp.error_get_dbus_name(Tp.Error.CANCELLED))
this.destroy();
else
this.update(this.title, this._getMessage(connectionError));
}
}));
},
_getMessage: function(connectionError) {
let message;
if (connectionError in _connectionErrorMessages) {
message = _connectionErrorMessages[connectionError];
} else {
message = _("Unknown reason");
}
return message;
},
destroy: function() {
if (this._enabledId != 0) {
this._account.disconnect(this._enabledId);
this._enabledId = 0;
}
if (this._invalidatedId != 0) {
this._account.disconnect(this._invalidatedId);
this._invalidatedId = 0;
}
if (this._connectionStatusId != 0) {
this._account.disconnect(this._connectionStatusId);
this._connectionStatusId = 0;
}
this.parent();
}
});
const Component = TelepathyClient;

View File

@ -18,7 +18,8 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Calendar = imports.ui.calendar;
function _onVertSepRepaint(area) {
function _onVertSepRepaint (area)
{
let cr = area.get_context();
let themeNode = area.get_theme_node();
let [width, height] = area.get_surface_size();
@ -32,7 +33,7 @@ function _onVertSepRepaint(area) {
cr.setLineWidth(stippleWidth);
cr.stroke();
cr.$dispose();
}
};
const DateMenuButton = new Lang.Class({
Name: 'DateMenuButton',

View File

@ -32,9 +32,11 @@ const FocusCaretTracker = new Lang.Class({
Name: 'FocusCaretTracker',
_init: function() {
Atspi.init();
Atspi.set_timeout(250, 250);
this._atspiListener = Atspi.EventListener.new(Lang.bind(this, this._onChanged));
this._atspiInited = false;
this._focusListenerRegistered = false;
this._caretListenerRegistered = false;
},
@ -46,20 +48,12 @@ const FocusCaretTracker = new Lang.Class({
this.emit('caret-moved', event);
},
_initAtspi: function() {
if (!this._atspiInited) {
Atspi.init();
Atspi.set_timeout(250, 250);
this._atspiInited = true;
}
},
registerFocusListener: function() {
if (this._focusListenerRegistered)
return;
this._initAtspi();
// Ignore the return value, we get an exception if they fail
// And they should never fail
this._atspiListener.register(STATECHANGED + ':focused');
this._atspiListener.register(STATECHANGED + ':selected');
this._focusListenerRegistered = true;
@ -69,8 +63,6 @@ const FocusCaretTracker = new Lang.Class({
if (this._caretListenerRegistered)
return;
this._initAtspi();
this._atspiListener.register(CARETMOVED);
this._caretListenerRegistered = true;
},

View File

@ -522,6 +522,11 @@ const IconGrid = new Lang.Class({
this._fixedHItemSize = Math.max(this._hItemSize - neededSpacePerItem, MIN_ICON_SIZE);
this._fixedVItemSize = Math.max(this._vItemSize - neededSpacePerItem, MIN_ICON_SIZE);
if (this._fixedHItemSize < MIN_ICON_SIZE)
this._fixedHItemSize = MIN_ICON_SIZE;
if (this._fixedVItemSize < MIN_ICON_SIZE)
this._fixedVItemSize = MIN_ICON_SIZE;
this._updateSpacingForSize(availWidth, availHeight);
}
let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize);
@ -530,8 +535,8 @@ const IconGrid = new Lang.Class({
// Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up
_updateChildrenScale: function(scale) {
let newIconSize = Math.floor(ICON_SIZE * scale);
for (let i in this._items) {
let newIconSize = Math.floor(ICON_SIZE * scale);
this._items[i].icon.setIconSize(newIconSize);
}
}

View File

@ -161,9 +161,9 @@ const Keyboard = new Lang.Class({
this._timestamp = global.display.get_current_time_roundtrip();
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA });
this._keyboardSettings.connect('changed', Lang.bind(this, this._settingsChanged));
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings = new Gio.Settings({ schema: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._settingsChanged));
this._settingsChanged();

View File

@ -22,11 +22,6 @@ const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
// The message tray takes this much pressure
// in the pressure barrier at once to release it.
const MESSAGE_TRAY_PRESSURE_THRESHOLD = 250; // pixels
const MESSAGE_TRAY_PRESSURE_TIMEOUT = 1000; // ms
const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
@ -150,7 +145,6 @@ const LayoutManager = new Lang.Class({
this._keyboardIndex = -1;
this._rightPanelBarrier = null;
this._trayBarrier = null;
this._inOverview = false;
this._updateRegionIdle = 0;
@ -210,7 +204,6 @@ const LayoutManager = new Lang.Class({
this.trayBox = new St.Widget({ name: 'trayBox',
layout_manager: new Clutter.BinLayout() });
this.addChrome(this.trayBox);
this._setupTrayPressure();
this.modalDialogGroup = new St.Widget({ name: 'modalDialogGroup',
layout_manager: new Clutter.BinLayout() });
@ -449,50 +442,9 @@ const LayoutManager = new Lang.Class({
}
},
_setupTrayPressure: function() {
this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD,
MESSAGE_TRAY_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW);
this._trayPressure.setEventFilter(this._trayBarrierEventFilter);
this._trayPressure.connect('trigger', function(barrier) {
if (Main.layoutManager.bottomMonitor.inFullscreen)
return;
Main.messageTray.openTray();
});
},
_updateTrayBarrier: function() {
let monitor = this.bottomMonitor;
if (this._trayBarrier) {
this._trayPressure.removeBarrier(this._trayBarrier);
this._trayBarrier.destroy();
this._trayBarrier = null;
}
this._trayBarrier = new Meta.Barrier({ display: global.display,
x1: monitor.x, x2: monitor.x + monitor.width,
y1: monitor.y + monitor.height, y2: monitor.y + monitor.height,
directions: Meta.BarrierDirection.NEGATIVE_Y });
this._trayPressure.addBarrier(this._trayBarrier);
},
_trayBarrierEventFilter: function(event) {
// Throw out all events where the pointer was grabbed by another
// client, as the client that grabbed the pointer expects to have
// complete control over it
if (event.grabbed && Main.modalCount == 0)
return true;
return false;
},
_monitorsChanged: function() {
this._updateMonitors();
this._updateBoxes();
this._updateTrayBarrier();
this._updateHotCorners();
this._updateBackgrounds();
this._updateFullscreen();
@ -1017,6 +969,43 @@ const LayoutManager = new Lang.Class({
else
continue;
// Ensure that the strut rects goes all the way to the screen edge,
// as this really what mutter expects. However skip this step
// in cases where this would render an entire monitor unusable.
switch (side) {
case Meta.Side.TOP:
let hasMonitorsAbove = this.monitors.some(Lang.bind(this,
function(mon) {
return this._isAboveOrBelowPrimary(mon) &&
mon.y < primary.y;
}));
if (!hasMonitorsAbove)
y1 = 0;
break;
case Meta.Side.BOTTOM:
if (this.primaryIndex == this.bottomIndex)
y2 = global.screen_height;
break;
case Meta.Side.LEFT:
let hasMonitorsLeft = this.monitors.some(Lang.bind(this,
function(mon) {
return !this._isAboveOrBelowPrimary(mon) &&
mon.x < primary.x;
}));
if (!hasMonitorsLeft)
x1 = 0;
break;
case Meta.Side.RIGHT:
let hasMonitorsRight = this.monitors.some(Lang.bind(this,
function(mon) {
return !this._isAboveOrBelowPrimary(mon) &&
mon.x > primary.x;
}));
if (!hasMonitorsRight)
x2 = global.screen_width;
break;
}
let strutRect = new Meta.Rectangle({ x: x1, y: y1, width: x2 - x1, height: y2 - y1});
let strut = new Meta.Strut({ rect: strutRect, side: side });
struts.push(strut);
@ -1059,10 +1048,10 @@ const HotCorner = new Lang.Class({
this._setupFallbackCornerIfNeeded(layoutManager);
this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
HOT_CORNER_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW);
this._pressureBarrier = new TriggerablePressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
HOT_CORNER_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW);
this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview));
// Cache the three ripples instead of dynamically creating and destroying them.
@ -1240,14 +1229,12 @@ const PressureBarrier = new Lang.Class({
Name: 'PressureBarrier',
_init: function(threshold, timeout, keybindingMode) {
this._threshold = threshold;
this._timeout = timeout;
this.threshold = threshold;
this.timeout = timeout;
this._keybindingMode = keybindingMode;
this._barriers = [];
this._eventFilter = null;
this._isTriggered = false;
this._reset();
this.reset();
},
addBarrier: function(barrier) {
@ -1276,10 +1263,10 @@ const PressureBarrier = new Lang.Class({
this._eventFilter = filter;
},
_reset: function() {
reset: function() {
this._barrierEvents = [];
this._currentPressure = 0;
this._lastTime = 0;
this.currentPressure = 0;
},
_isHorizontal: function(barrier) {
@ -1300,12 +1287,21 @@ const PressureBarrier = new Lang.Class({
return Math.abs(event.dy);
},
get currentPressure() {
return this._currentPressure;
},
set currentPressure(value) {
this._currentPressure = value;
this.emit('pressure-changed');
},
_trimBarrierEvents: function() {
// Events are guaranteed to be sorted in time order from
// oldest to newest, so just look for the first old event,
// and then chop events after that off.
let i = 0;
let threshold = this._lastTime - this._timeout;
let threshold = this._lastTime - this.timeout;
while (i < this._barrierEvents.length) {
let [time, distance] = this._barrierEvents[i];
@ -1318,21 +1314,75 @@ const PressureBarrier = new Lang.Class({
for (i = 0; i < firstNewEvent; i++) {
let [time, distance] = this._barrierEvents[i];
this._currentPressure -= distance;
this.currentPressure = distance;
}
this._barrierEvents = this._barrierEvents.slice(firstNewEvent);
},
_onBarrierLeft: function(barrier, event) {
this._reset();
this.reset();
},
_shouldUseEvent: function(barrier, event) {
if (this._eventFilter && this._eventFilter(event))
return false;
// Throw out all events not in the proper keybinding mode
if (!(this._keybindingMode & Main.keybindingMode))
return false;
let slide = this._getDistanceAlongBarrier(barrier, event);
let distance = this._getDistanceAcrossBarrier(barrier, event);
// Throw out events where the cursor is move more
// along the axis of the barrier than moving with
// the barrier.
if (slide > distance)
return false;
return true;
},
_appendEvent: function(barrier, event) {
let distance = this._getDistanceAcrossBarrier(barrier, event);
this._lastTime = event.time;
this._trimBarrierEvents();
distance = Math.min(15, distance);
this._barrierEvents.push([event.time, distance]);
this.currentPressure += distance;
},
_onBarrierHit: function(barrier, event) {
if (!this._shouldUseEvent(barrier, event))
return;
this._appendEvent(barrier, event);
}
});
Signals.addSignalMethods(PressureBarrier.prototype);
const TriggerablePressureBarrier = new Lang.Class({
Name: 'TriggerablePressureBarrier',
Extends: PressureBarrier,
_init: function(threshold, timeout, keybindingMode) {
this.parent(threshold, timeout, keybindingMode);
this._isTriggered = false;
},
_trigger: function() {
this._isTriggered = true;
this.emit('trigger');
this._reset();
this.reset();
},
_onBarrierLeft: function() {
this.parent();
this._isTriggered = false;
},
_onBarrierHit: function(barrier, event) {
@ -1341,37 +1391,17 @@ const PressureBarrier = new Lang.Class({
if (this._isTriggered)
return;
if (this._eventFilter && this._eventFilter(event))
if (!this._shouldUseEvent(barrier, event))
return;
// Throw out all events not in the proper keybinding mode
if (!(this._keybindingMode & Main.keybindingMode))
return;
let slide = this._getDistanceAlongBarrier(barrier, event);
let distance = this._getDistanceAcrossBarrier(barrier, event);
if (distance >= this._threshold) {
if (distance >= this.threshold) {
this._trigger();
return;
}
// Throw out events where the cursor is move more
// along the axis of the barrier than moving with
// the barrier.
if (slide > distance)
return;
this._appendEvent(barrier, event);
this._lastTime = event.time;
this._trimBarrierEvents();
distance = Math.min(15, distance);
this._barrierEvents.push([event.time, distance]);
this._currentPressure += distance;
if (this._currentPressure >= this._threshold)
if (this.currentPressure >= this.threshold)
this._trigger();
}
},
});
Signals.addSignalMethods(PressureBarrier.prototype);

View File

@ -797,7 +797,7 @@ const LookingGlass = new Lang.Class({
reactive: true });
this.actor.connect('key-press-event', Lang.bind(this, this._globalKeyPressEvent));
this._interfaceSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
this._interfaceSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._interfaceSettings.connect('changed::monospace-font-name',
Lang.bind(this, this._updateFont));
this._updateFont();

View File

@ -441,8 +441,8 @@ const Magnifier = new Lang.Class({
},
_settingsInit: function(zoomRegion) {
this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA });
this._appSettings = new Gio.Settings({ schema: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema: MAGNIFIER_SCHEMA });
if (zoomRegion) {
// Mag factor is accurate to two decimal places.

View File

@ -74,6 +74,7 @@ let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let _a11ySettings = null;
let dynamicWorkspacesSchema = null;
function _sessionUpdated() {
_loadDefaultStylesheet();
@ -110,6 +111,7 @@ function start() {
sessionMode = new SessionMode.SessionMode();
sessionMode.connect('updated', _sessionUpdated);
_initializePrefs();
_initializeUI();
shellDBusService = new ShellDBus.GnomeShell();
@ -118,6 +120,17 @@ function start() {
_sessionUpdated();
}
function _initializePrefs() {
let keys = new Gio.Settings({ schema: sessionMode.overridesSchema }).list_keys();
for (let i = 0; i < keys.length; i++)
Meta.prefs_override_preference_schema(keys[i], sessionMode.overridesSchema);
if (keys.indexOf('dynamic-workspaces') > -1)
dynamicWorkspacesSchema = sessionMode.overridesSchema;
else
dynamicWorkspacesSchema = 'org.gnome.mutter';
}
function _initializeUI() {
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
// also initialize ShellAppSystem first. ShellAppSystem
@ -160,7 +173,7 @@ function _initializeUI() {
layoutManager.init();
overview.init();
_a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
_a11ySettings = new Gio.Settings({ schema: A11Y_SCHEMA });
global.display.connect('overlay-key', Lang.bind(overview, function () {
if (!_a11ySettings.get_boolean (STICKY_KEYS_ENABLE))

File diff suppressed because it is too large Load Diff

View File

@ -91,21 +91,6 @@ const rewriteRules = {
]
};
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
'bluetooth-applet': 'bluetooth',
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
// when moved to control center
'gnome-sound-applet': 'volume',
'nm-applet': 'network',
'gnome-power-manager': 'battery',
'keyboard': 'keyboard',
'a11y-keyboard': 'a11y',
'kbd-scrolllock': 'keyboard',
'kbd-numlock': 'keyboard',
'kbd-capslock': 'keyboard',
'ibus-ui-gtk': 'keyboard'
};
const FdoNotificationDaemon = new Lang.Class({
Name: 'FdoNotificationDaemon',
@ -120,16 +105,10 @@ const FdoNotificationDaemon = new Lang.Class({
this._nextNotificationId = 1;
this._trayManager = new Shell.TrayManager();
this._trayIconAddedId = this._trayManager.connect('tray-icon-added', Lang.bind(this, this._onTrayIconAdded));
this._trayIconRemovedId = this._trayManager.connect('tray-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
Shell.WindowTracker.get_default().connect('notify::focus-app',
Lang.bind(this, this._onFocusAppChanged));
Main.overview.connect('hidden',
Lang.bind(this, this._onFocusAppChanged));
this._trayManager.manage_screen(global.screen, Main.messageTray.actor);
},
_imageForNotificationData: function(hints) {
@ -170,28 +149,23 @@ const FdoNotificationDaemon = new Lang.Class({
return null;
},
_lookupSource: function(title, pid, trayIcon) {
_lookupSource: function(title, pid) {
for (let i = 0; i < this._sources.length; i++) {
let source = this._sources[i];
if (source.pid == pid &&
(source.initialTitle == title || source.trayIcon || trayIcon))
if (source.pid == pid && source.initialTitle == title)
return source;
}
return null;
},
// Returns the source associated with ndata.notification if it is set.
// If the existing or requested source is associated with a tray icon
// and passed in pid matches a pid of an existing source, the title
// match is ignored to enable representing a tray icon and notifications
// from the same application with a single source.
//
// If no existing source is found, a new source is created as long as
// pid is provided.
//
// Either a pid or ndata.notification is needed to retrieve or
// create a source.
_getSource: function(title, pid, ndata, sender, trayIcon) {
_getSource: function(title, pid, ndata, sender) {
if (!pid && !(ndata && ndata.notification))
return null;
@ -202,13 +176,13 @@ const FdoNotificationDaemon = new Lang.Class({
if (ndata && ndata.notification)
return ndata.notification.source;
let source = this._lookupSource(title, pid, trayIcon);
let source = this._lookupSource(title, pid);
if (source) {
source.setTitle(title);
return source;
}
let source = new FdoNotificationDaemonSource(title, pid, sender, trayIcon, ndata ? ndata.hints['desktop-entry'] : null);
let source = new FdoNotificationDaemonSource(title, pid, sender, ndata ? ndata.hints['desktop-entry'] : null);
this._sources.push(source);
source.connect('destroy', Lang.bind(this, function() {
@ -334,13 +308,14 @@ const FdoNotificationDaemon = new Lang.Class({
},
_makeButton: function(id, label, useActionIcons) {
let button = new St.Button({ can_focus: true });
let button = new St.Button({ can_focus: true,
x_expand: true,
style_class: 'notification-button' });
let iconName = id.endsWith('-symbolic') ? id : id + '-symbolic';
if (useActionIcons && Gtk.IconTheme.get_default().has_icon(iconName)) {
button.add_style_class_name('notification-icon-button');
button.child = new St.Icon({ icon_name: iconName });
button.child = new St.Icon({ icon_name: iconName, icon_size: 16 });
} else {
button.add_style_class_name('notification-button');
button.label = label;
}
return button;
@ -379,8 +354,6 @@ const FdoNotificationDaemon = new Lang.Class({
let gicon = this._iconForNotificationData(icon, hints);
let gimage = this._imageForNotificationData(hints);
let image = null;
// If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon
// and don't show a large image. There are currently many applications that use
// notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets
@ -389,10 +362,7 @@ const FdoNotificationDaemon = new Lang.Class({
// So the logic here does the right thing for this case. If both an icon and either
// one of 'image-data' or 'image-path' are specified, we show both an icon and
// a large image.
if (gicon && gimage)
image = new St.Icon({ gicon: gimage,
icon_size: notification.IMAGE_SIZE });
else if (!gicon && gimage)
if (!gicon && gimage)
gicon = gimage;
else if (!gicon)
gicon = this._fallbackIconForNotificationData(hints);
@ -402,7 +372,6 @@ const FdoNotificationDaemon = new Lang.Class({
clear: true,
soundFile: hints['sound-file'],
soundName: hints['sound-name'] });
notification.setImage(image);
let hasDefaultAction = false;
@ -442,7 +411,6 @@ const FdoNotificationDaemon = new Lang.Class({
notification.setUrgency(MessageTray.Urgency.CRITICAL);
break;
}
notification.setResident(hints.resident == true);
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
// of the 'transient' hint with hints['transient'] rather than hints.transient
notification.setTransient(hints['transient'] == true);
@ -470,7 +438,6 @@ const FdoNotificationDaemon = new Lang.Class({
'body-markup',
// 'icon-multi',
'icon-static',
'persistence',
'sound',
];
},
@ -492,7 +459,7 @@ const FdoNotificationDaemon = new Lang.Class({
for (let i = 0; i < this._sources.length; i++) {
let source = this._sources[i];
if (source.app == tracker.focus_app) {
source.destroyNonResidentNotifications();
source.destroyNotifications();
return;
}
}
@ -507,30 +474,15 @@ const FdoNotificationDaemon = new Lang.Class({
this._dbusImpl.emit_signal('ActionInvoked',
GLib.Variant.new('(us)', [id, action]));
},
_onTrayIconAdded: function(o, icon) {
let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass] !== undefined)
return;
let source = this._getSource(icon.title || icon.wm_class || C_("program", "Unknown"), icon.pid, null, null, icon);
},
_onTrayIconRemoved: function(o, icon) {
let source = this._lookupSource(null, icon.pid, true);
if (source)
source.destroy();
}
});
const FdoNotificationDaemonSource = new Lang.Class({
Name: 'FdoNotificationDaemonSource',
Extends: MessageTray.Source,
_init: function(title, pid, sender, trayIcon, appId) {
_init: function(title, pid, sender, appId) {
// Need to set the app before chaining up, so
// methods called from the parent constructor can find it
this.trayIcon = trayIcon;
this.pid = pid;
this.app = this._getApp(appId);
@ -550,12 +502,6 @@ const FdoNotificationDaemonSource = new Lang.Class({
Lang.bind(this, this._onNameVanished));
else
this._nameWatcherId = 0;
if (this.trayIcon) {
// Try again finding the app, using the WM_CLASS from the tray icon
this._setSummaryIcon(this.trayIcon);
this.useNotificationIcon = false;
}
},
_createPolicy: function() {
@ -571,48 +517,23 @@ const FdoNotificationDaemonSource = new Lang.Class({
// Destroy the notification source when its sender is removed from DBus.
// Only do so if this.app is set to avoid removing "notify-send" sources, senders
// of which аre removed from DBus immediately.
// Sender being removed from DBus would normally result in a tray icon being removed,
// so allow the code path that handles the tray icon being removed to handle that case.
if (!this.trayIcon && this.app)
if (this.app)
this.destroy();
},
processNotification: function(notification, gicon) {
if (gicon)
this._gicon = gicon;
if (!this.trayIcon)
this.iconUpdated();
this.iconUpdated();
let tracker = Shell.WindowTracker.get_default();
if (notification.resident && this.app && tracker.focus_app == this.app)
if (this.app && tracker.focus_app == this.app)
this.pushNotification(notification);
else
this.notify(notification);
},
handleSummaryClick: function(button) {
if (!this.trayIcon)
return false;
let event = Clutter.get_current_event();
// Left clicks are passed through only where there aren't unacknowledged
// notifications, so it possible to open them in summary mode; right
// clicks are always forwarded, as the right click menu is not useful for
// tray icons
if (button == 1 &&
this.notifications.length > 0)
return false;
let id = global.stage.connect('deactivate', Lang.bind(this, function () {
global.stage.disconnect(id);
this.trayIcon.click(event);
}));
Main.overview.hide();
return true;
},
_getApp: function(appId) {
let app;
@ -620,16 +541,6 @@ const FdoNotificationDaemonSource = new Lang.Class({
if (app != null)
return app;
if (this.trayIcon) {
app = Shell.AppSystem.get_default().lookup_startup_wmclass(this.trayIcon.wm_class);
if (app != null)
return app;
app = Shell.AppSystem.get_default().lookup_desktop_wmclass(this.trayIcon.wm_class);
if (app != null)
return app;
}
if (appId) {
app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
if (app != null)
@ -651,12 +562,11 @@ const FdoNotificationDaemonSource = new Lang.Class({
open: function() {
this.openApp();
this.destroyNonResidentNotifications();
this.destroyNotifications();
},
_lastNotificationRemoved: function() {
if (!this.trayIcon)
this.destroy();
this.destroy();
},
openApp: function() {
@ -677,11 +587,7 @@ const FdoNotificationDaemonSource = new Lang.Class({
},
createIcon: function(size) {
if (this.trayIcon) {
return new Clutter.Clone({ width: size,
height: size,
source: this.trayIcon });
} else if (this.app) {
if (this.app) {
return this.app.create_icon_texture(size);
} else if (this._gicon) {
return new St.Icon({ gicon: this._gicon,

View File

@ -263,8 +263,6 @@ const Overview = new Lang.Class({
this._overview.add(this._controls.actor, { y_fill: true, expand: true });
this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._stack.add_actor(this._controls.indicatorActor);
// TODO - recalculate everything when desktop size changes
this.dashIconSize = this._dash.iconSize;
this._dash.connect('icon-size-changed',

View File

@ -396,111 +396,6 @@ const DashSpacer = new Lang.Class({
}
});
const MessagesIndicator = new Lang.Class({
Name: 'MessagesIndicator',
_init: function(viewSelector) {
this._count = 0;
this._sources = [];
this._viewSelector = viewSelector;
this._container = new St.BoxLayout({ style_class: 'messages-indicator-contents',
reactive: true,
track_hover: true,
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.CENTER });
this._icon = new St.Icon({ icon_name: 'user-idle-symbolic',
icon_size: 16 });
this._container.add_actor(this._icon);
this._label = new St.Label();
this._container.add_actor(this._label);
this._highlight = new St.Widget({ style_class: 'messages-indicator-highlight',
x_expand: true,
y_expand: true,
y_align: Clutter.ActorAlign.END,
visible: false });
this._container.connect('notify::hover', Lang.bind(this,
function() {
this._highlight.visible = this._container.hover;
}));
let clickAction = new Clutter.ClickAction();
this._container.add_action(clickAction);
clickAction.connect('clicked', Lang.bind(this,
function() {
Main.messageTray.openTray();
}));
Main.messageTray.connect('showing', Lang.bind(this,
function() {
this._highlight.visible = false;
this._container.hover = false;
}));
let layout = new Clutter.BinLayout();
this.actor = new St.Widget({ layout_manager: layout,
style_class: 'messages-indicator',
y_expand: true,
y_align: Clutter.ActorAlign.END,
visible: false });
this.actor.add_actor(this._container);
this.actor.add_actor(this._highlight);
Main.messageTray.connect('source-added', Lang.bind(this, this._onSourceAdded));
Main.messageTray.connect('source-removed', Lang.bind(this, this._onSourceRemoved));
let sources = Main.messageTray.getSources();
sources.forEach(Lang.bind(this, function(source) { this._onSourceAdded(null, source); }));
this._viewSelector.connect('page-changed', Lang.bind(this, this._updateVisibility));
Main.overview.connect('showing', Lang.bind(this, this._updateVisibility));
},
_onSourceAdded: function(tray, source) {
if (source.trayIcon)
return;
source.connect('count-updated', Lang.bind(this, this._updateCount));
this._sources.push(source);
this._updateCount();
},
_onSourceRemoved: function(tray, source) {
this._sources.splice(this._sources.indexOf(source), 1);
this._updateCount();
},
_updateCount: function() {
let count = 0;
let hasChats = false;
this._sources.forEach(Lang.bind(this,
function(source) {
count += source.indicatorCount;
hasChats |= source.isChat;
}));
this._count = count;
this._label.text = ngettext("%d new message",
"%d new messages",
count).format(count);
this._icon.visible = hasChats;
this._updateVisibility();
},
_updateVisibility: function() {
let activePage = this._viewSelector.getActivePage();
let visible = ((this._count > 0) && (activePage == ViewSelector.ViewPage.WINDOWS));
this.actor.visible = visible;
}
});
const ControlsLayout = new Lang.Class({
Name: 'ControlsLayout',
Extends: Clutter.BinLayout,
@ -529,9 +424,6 @@ const ControlsManager = new Lang.Class({
this.viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility));
this.viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty));
this._indicator = new MessagesIndicator(this.viewSelector);
this.indicatorActor = this._indicator.actor;
let layout = new ControlsLayout();
this.actor = new St.Widget({ layout_manager: layout,
reactive: true,

View File

@ -41,7 +41,8 @@ const ButtonBox = new Lang.Class({
},
_getPreferredWidth: function(actor, forHeight, alloc) {
let child = actor.get_first_child();
let children = actor.get_children();
let child = children.length > 0 ? children[0] : null;
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
@ -54,7 +55,8 @@ const ButtonBox = new Lang.Class({
},
_getPreferredHeight: function(actor, forWidth, alloc) {
let child = actor.get_first_child();
let children = actor.get_children();
let child = children.length > 0 ? children[0] : null;
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
@ -64,11 +66,13 @@ const ButtonBox = new Lang.Class({
},
_allocate: function(actor, box, flags) {
let child = actor.get_first_child();
if (!child)
let children = actor.get_children();
if (children.length == 0)
return;
let child = children[0];
let [minWidth, natWidth] = child.get_preferred_width(-1);
let [minHeight, natHeight] = child.get_preferred_height(-1);
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;

View File

@ -46,28 +46,33 @@ function isPopupMenuItemVisible(child) {
* @side Side to which the arrow points.
*/
function arrowIcon(side) {
let iconName;
let rotation;
switch (side) {
case St.Side.TOP:
iconName = 'pan-up-symbolic';
rotation = 180;
break;
case St.Side.RIGHT:
iconName = 'pan-end-symbolic';
rotation = - 90;
break;
case St.Side.BOTTOM:
iconName = 'pan-down-symbolic';
rotation = 0;
break;
case St.Side.LEFT:
iconName = 'pan-start-symbolic';
rotation = 90;
break;
}
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_path(global.datadir +
'/theme/menu-arrow-symbolic.svg') });
let arrow = new St.Icon({ style_class: 'popup-menu-arrow',
icon_name: iconName,
gicon: gicon,
accessible_role: Atk.Role.ARROW,
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
arrow.rotation_angle_z = rotation;
return arrow;
}

View File

@ -117,7 +117,7 @@ function loadRemoteSearchProviders(callback) {
}
}
let searchSettings = new Gio.Settings({ schema_id: Search.SEARCH_PROVIDERS_SCHEMA });
let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
if (searchSettings.get_boolean('disable-external')) {
callback([]);
return;

View File

@ -38,8 +38,8 @@ const RunDialog = new Lang.Class({
this.parent({ styleClass: 'run-dialog',
destroyOnClose: false });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA });
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
this._terminalSettings = new Gio.Settings({ schema: TERMINAL_SCHEMA });
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
this._enableInternalCommands = global.settings.get_boolean('development-tools');
}));

View File

@ -563,7 +563,7 @@ const ScreenShield = new Lang.Class({
this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); }));
}));
this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
this._settings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
this._isModal = false;
this._hasLockScreen = false;

View File

@ -68,13 +68,6 @@ const ScreenshotService = new Lang.Class({
Gio.DBus.session.own_name('org.gnome.Shell.Screenshot', Gio.BusNameOwnerFlags.REPLACE, null, null);
},
_checkArea: function(x, y, width, height) {
return x >= 0 && y >= 0 &&
width > 0 && height > 0 &&
x + width <= global.screen_width &&
y + height <= global.screen_height;
},
_onScreenshotComplete: function(obj, result, area, filenameUsed, flash, invocation) {
if (flash && result) {
let flashspot = new Flashspot(area);
@ -85,31 +78,13 @@ const ScreenshotService = new Lang.Class({
invocation.return_value(retval);
},
_scaleArea: function(x, y, width, height) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
x *= scaleFactor;
y *= scaleFactor;
width *= scaleFactor;
height *= scaleFactor;
return [x, y, width, height];
},
_unscaleArea: function(x, y, width, height) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
x /= scaleFactor;
y /= scaleFactor;
width /= scaleFactor;
height /= scaleFactor;
return [x, y, width, height];
},
ScreenshotAreaAsync : function (params, invocation) {
let [x, y, width, height, flash, filename, callback] = params;
[x, y, width, height] = this._scaleArea(x, y, width, height);
if (!this._checkArea(x, y, width, height)) {
invocation.return_error_literal(Gio.IOErrorEnum,
Gio.IOErrorEnum.CANCELLED,
"Invalid params");
if (x < 0 || y < 0 ||
width <= 0 || height <= 0 ||
x + width > global.screen_width || y + height > global.screen_height) {
invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
"Invalid params");
return;
}
let screenshot = new Shell.Screenshot();
@ -140,9 +115,9 @@ const ScreenshotService = new Lang.Class({
selectArea.connect('finished', Lang.bind(this,
function(selectArea, areaRectangle) {
if (areaRectangle) {
let retRectangle = this._unscaleArea(areaRectangle.x, areaRectangle.y,
areaRectangle.width, areaRectangle.height);
let retval = GLib.Variant.new('(iiii)', retRectangle);
let retval = GLib.Variant.new('(iiii)',
[areaRectangle.x, areaRectangle.y,
areaRectangle.width, areaRectangle.height]);
invocation.return_value(retval);
} else {
invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
@ -151,18 +126,9 @@ const ScreenshotService = new Lang.Class({
}));
},
FlashAreaAsync: function(params, invocation) {
let [x, y, width, height] = params;
[x, y, width, height] = this._scaleArea(x, y, width, height);
if (!this._checkArea(x, y, width, height)) {
invocation.return_error_literal(Gio.IOErrorEnum,
Gio.IOErrorEnum.CANCELLED,
"Invalid params");
return;
}
FlashArea: function(x, y, width, height) {
let flashspot = new Flashspot({ x : x, y : y, width: width, height: height});
flashspot.fire();
invocation.return_value(null);
}
});

View File

@ -31,7 +31,7 @@ const SearchSystem = new Lang.Class({
this._registerProvider(new AppDisplay.AppSearchProvider());
this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
this._searchSettings = new Gio.Settings({ schema: SEARCH_PROVIDERS_SCHEMA });
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));

View File

@ -18,6 +18,7 @@ const _modes = {
'restrictive': {
parentMode: null,
stylesheetName: 'gnome-shell.css',
overridesSchema: 'org.gnome.shell.overrides',
hasOverview: false,
showCalendarEvents: false,
allowSettings: false,

View File

@ -48,7 +48,7 @@ const ATIndicator = new Lang.Class({
this.actor.add_child(this._hbox);
this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
this._a11ySettings = new Gio.Settings({ schema: A11Y_SCHEMA });
this._a11ySettings.connect('changed::' + KEY_ALWAYS_SHOW, Lang.bind(this, this._queueSyncMenuVisibility));
let highContrast = this._buildHCItem();
@ -118,7 +118,7 @@ const ATIndicator = new Lang.Class({
},
_buildItem: function(string, schema, key) {
let settings = new Gio.Settings({ schema_id: schema });
let settings = new Gio.Settings({ schema: schema });
let widget = this._buildItemExtended(string,
settings.get_boolean(key),
settings.is_writable(key),
@ -134,8 +134,8 @@ const ATIndicator = new Lang.Class({
},
_buildHCItem: function() {
let interfaceSettings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA });
let wmSettings = new Gio.Settings({ schema_id: WM_SCHEMA });
let interfaceSettings = new Gio.Settings({ schema: DESKTOP_INTERFACE_SCHEMA });
let wmSettings = new Gio.Settings({ schema: WM_SCHEMA });
let gtkTheme = interfaceSettings.get_string(KEY_GTK_THEME);
let iconTheme = interfaceSettings.get_string(KEY_ICON_THEME);
let wmTheme = wmSettings.get_string(KEY_WM_THEME);
@ -186,7 +186,7 @@ const ATIndicator = new Lang.Class({
},
_buildFontItem: function() {
let settings = new Gio.Settings({ schema_id: DESKTOP_INTERFACE_SCHEMA });
let settings = new Gio.Settings({ schema: DESKTOP_INTERFACE_SCHEMA });
let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
let initial_setting = (factor > 1.0);

View File

@ -365,18 +365,18 @@ const InputSourceIndicator = new Lang.Class({
this._mruSources = [];
this._keybindingAction =
Main.wm.addKeybinding('switch-input-source',
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
new Gio.Settings({ schema: "org.gnome.desktop.wm.keybindings" }),
Meta.KeyBindingFlags.REVERSES,
Shell.KeyBindingMode.ALL,
Lang.bind(this, this._switchInputSource));
this._keybindingActionBackward =
Main.wm.addKeybinding('switch-input-source-backward',
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
new Gio.Settings({ schema: "org.gnome.desktop.wm.keybindings" }),
Meta.KeyBindingFlags.REVERSES |
Meta.KeyBindingFlags.IS_REVERSED,
Meta.KeyBindingFlags.REVERSED,
Shell.KeyBindingMode.ALL,
Lang.bind(this, this._switchInputSource));
this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings = new Gio.Settings({ schema: DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings.connect('changed::' + KEY_CURRENT_INPUT_SOURCE, Lang.bind(this, this._currentInputSourceChanged));
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));

View File

@ -43,7 +43,7 @@ const Indicator = new Lang.Class({
_init: function() {
this.parent();
this._settings = new Gio.Settings({ schema_id: LOCATION_SCHEMA });
this._settings = new Gio.Settings({ schema: LOCATION_SCHEMA });
this._settings.connect('changed::' + MAX_ACCURACY_LEVEL,
Lang.bind(this, this._onMaxAccuracyLevelChanged));
@ -191,12 +191,8 @@ const Indicator = new Lang.Class({
let unpacked = properties.deep_unpack();
if ("InUse" in unpacked)
this._syncIndicator();
if ("AvailableAccuracyLevel" in unpacked) {
if ("AvailableAccuracyLevel" in unpacked)
this._availableAccuracyLevel = this._proxy.AvailableAccuracyLevel;
if (this._getMaxAccuracyLevel() != 0)
this._settings.set_enum(MAX_ACCURACY_LEVEL, this._availableAccuracyLevel);
}
}
});

View File

@ -95,11 +95,11 @@ const Indicator = new Lang.Class({
_init: function() {
this.parent();
this._screenSaverSettings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._privacySettings = new Gio.Settings({ schema_id: PRIVACY_SCHEMA });
this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' });
this._screenSaverSettings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
this._loginScreenSettings = new Gio.Settings({ schema: LOGIN_SCREEN_SCHEMA });
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
this._privacySettings = new Gio.Settings({ schema: PRIVACY_SCHEMA });
this._orientationSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.peripherals.touchscreen' });
this._session = new GnomeSession.SessionManager();
this._loginManager = LoginManager.getLoginManager();

View File

@ -62,7 +62,7 @@ const UnlockDialog = new Lang.Class({
this.allowCancel = false;
let screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
let screenSaverSettings = new Gio.Settings({ schema: 'org.gnome.desktop.screensaver' });
if (screenSaverSettings.get_boolean('user-switch-enabled')) {
let otherUserLabel = new St.Label({ text: _("Log in as another user"),
style_class: 'login-dialog-not-listed-label' });

View File

@ -132,14 +132,14 @@ const ViewSelector = new Lang.Class({
}));
Main.wm.addKeybinding('toggle-application-view',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._toggleAppsPage));
Main.wm.addKeybinding('toggle-overview',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
@ -285,10 +285,10 @@ const ViewSelector = new Lang.Class({
} else if (!this._searchActive && !global.stage.key_focus) {
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
return Clutter.EVENT_STOP;
return true;
} else if (symbol == Clutter.ISO_Left_Tab) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false);
return Clutter.EVENT_STOP;
return true;
}
}
return Clutter.EVENT_PROPAGATE;

View File

@ -199,19 +199,12 @@ const WorkspaceTracker = new Lang.Class({
global.screen.connect('window-left-monitor', Lang.bind(this, this._windowLeftMonitor));
global.screen.connect('restacked', Lang.bind(this, this._windowsRestacked));
this._workspaceSettings = this._getWorkspaceSettings();
this._workspaceSettings = new Gio.Settings({ schema: Main.dynamicWorkspacesSchema });
this._workspaceSettings.connect('changed::dynamic-workspaces', Lang.bind(this, this._queueCheckWorkspaces));
this._nWorkspacesChanged();
},
_getWorkspaceSettings: function() {
let settings = global.get_overrides_settings();
if (settings.list_keys().indexOf('dynamic-workspaces') > -1)
return settings;
return new Gio.Settings({ schema_id: 'org.gnome.mutter' });
},
_checkWorkspaces: function() {
let i;
let emptyWorkspaces = [];
@ -655,13 +648,13 @@ const WindowManager = new Lang.Class({
Lang.bind(this, this._startA11ySwitcher));
this.addKeybinding('pause-resume-tweens',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.ALL,
Lang.bind(this, this._toggleTweens));
this.addKeybinding('open-application-menu',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.TOPBAR_POPUP,

View File

@ -67,7 +67,7 @@ const WindowCloneLayout = new Lang.Class({
// paradoxically is the smaller rectangle, containing the positions
// of the visible frame. The input rect contains everything,
// including the invisible border padding.
let inputRect = window.get_buffer_rect();
let inputRect = window.get_input_rect();
let box = new Clutter.ActorBox();

View File

@ -665,7 +665,7 @@ const ThumbnailsBox = new Lang.Class({
Main.overview.connect('window-drag-cancelled',
Lang.bind(this, this._onDragCancelled));
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
this._settings.connect('changed::dynamic-workspaces',
Lang.bind(this, this._updateSwitcherVisibility));
},

View File

@ -94,7 +94,7 @@ const WorkspacesView = new Lang.Class({
this._scrolling = false; // swipe-scrolling
this._animatingScroll = false; // programatically updating the adjustment
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
@ -429,7 +429,7 @@ const WorkspacesDisplay = new Lang.Class({
this._workspacesViews = [];
this._primaryScrollAdjustment = null;
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
this._settings.connect('changed::workspaces-only-on-primary',
Lang.bind(this,
this._workspacesOnlyOnPrimaryChanged));

337
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-06-17 07:28+0000\n"
"PO-Revision-Date: 2014-06-17 18:41+0200\n"
"POT-Creation-Date: 2014-05-20 07:27+0000\n"
"PO-Revision-Date: 2014-05-20 19:10+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"
@ -55,6 +55,7 @@ msgid "Window management and application launching"
msgstr "Gestión de ventanas e inicio de aplicaciones"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extension Preferences"
msgstr "Preferencias de las extensiones de GNOME Shell"
@ -125,28 +126,19 @@ msgstr ""
"el área de favoritos."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "App Picker View"
msgstr "Visor del selector de aplicaciones"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "Index of the currently selected view in the application picker."
msgstr ""
"Índice de la vista seleccionada actualmente en el selector de aplicaciones."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog"
msgstr "Histórico del diálogo de comandos (Alt+F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "History for the looking glass dialog"
msgstr "Histórico del diálogo de «looking glass»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "Always show the 'Log out' menu item in the user menu."
msgstr ""
"Mostrar siempre el elemento de menú «Cerrar sesión» en el menú del usuario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
@ -154,14 +146,14 @@ msgstr ""
"Esta clave sobrescribe la ocultación automática del elemento de menú «Cerrar "
"sesión» en situaciones de un único usuario o de una única sesión."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Indica si se debe recordar la contraseña para montar sistemas de archivos "
"remotos o cifrados"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@ -173,77 +165,70 @@ msgstr ""
"en un futuro, se mostrará la casilla «Recordar contraseña». Esta clave "
"establece el valor predeterminado de la casilla."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Mostrar la fecha de la semana en el calendario"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Si es cierta, muestra la fecha de semana ISO en el calendario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Asociación de teclas para abrir el menú de la aplicación"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Asociación de teclas para abrir el menú de la aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Asociación de teclas para la vista «Mostrar aplicaciones»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Asociación de teclas para abrir la vista «Mostrar aplicaciones» de la vista "
"de actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Asociación de teclas para la vista general"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Asociación de teclas para abrir la Vista de actividades"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Asociación de teclas para dar el foco a la notificación activa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Asociación de teclas para dar el foco a la notificación activa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr ""
"Asociación de teclas que pausa y reanuda los «tweens» en ejecución, para "
"depuración."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Qué teclado usar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "El tipo de teclado que usar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The maximum accuracy level of location."
msgstr "El nivel máximo de precisión de la ubicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures the maximum level of location accuracy applications are allowed "
"to see. Valid options are 'off' (disable location tracking), 'country', "
@ -260,24 +245,11 @@ msgstr ""
"pueden encontrar sobre la ubicación de usuario usando los recursos de la red "
"(aunque con precisión a nivel de la calle, en el mejor de los casos)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "Limit switcher to current workspace."
msgstr "Limitar el intercambiador al área de trabajo actual."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
msgstr ""
"Si es cierto, sólo las aplicaciones que tengan ventanas en el área de "
"trabajo actual se muestran en el selector. Si no, se incluyen todas las "
"aplicaciones."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "The application icon mode."
msgstr "El modo de icono de la aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -287,51 +259,60 @@ msgstr ""
"son «thumbnail-only» (muestra una miniatura de la ventana), «app-icon-"
"only» (sólo muestra el icono de la aplicación) «both»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
msgstr ""
"Si es cierto, sólo se muestran en el selector las ventanas del área de "
"trabajo actual. Si no, se incluyen todas las ventanas."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Attach modal dialog to the parent window"
msgstr "Acoplar un diálogo modal a la ventana padre"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Esta clave sobrescribe la clave en org.gnome.mutter al ejecutar GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Arrangement of buttons on the titlebar"
msgstr "Orden de los botones en la barra de título"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Esta clave sobrescribe la clave en org.gnome.desktop.wm.preferences al "
"ejecutar GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
"ventana"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Workspaces are managed dynamically"
msgstr "Las áreas de trabajo se gestionan dinámicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabajo solo en la pantalla principal"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Retardo al cambiar el foco del ratón hasta que el puntero deja de moverse"
#: ../js/extensionPrefs/main.js:125
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "Hubo un error al lanzar el diálogo de preferencias para %s:"
#: ../js/extensionPrefs/main.js:157
msgid "GNOME Shell Extensions"
msgstr "Extensiones de GNOME Shell"
#: ../js/extensionPrefs/main.js:167
msgid "Extension"
msgstr "Extensión"
#: ../js/extensionPrefs/main.js:191
msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione una extensión que configurar usando la caja combinada de arriba."
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
@ -354,25 +335,25 @@ msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:269
#: ../js/gdm/loginDialog.js:271
msgid "Choose Session"
msgstr "Elegir sesión"
#: ../js/gdm/loginDialog.js:429
#: ../js/gdm/loginDialog.js:431
msgid "Not listed?"
msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:614
#: ../js/gdm/loginDialog.js:616
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(ej., usuario o %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280
msgid "Username: "
msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:922
#: ../js/gdm/loginDialog.js:924
msgid "Login Window"
msgstr "Ventana de inicio de sesión"
@ -397,31 +378,31 @@ msgstr "No se pudo analizar el comando:"
msgid "Execution of “%s” failed:"
msgstr "Falló la ejecución de «%s»:"
#: ../js/ui/appDisplay.js:641
#: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here"
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:752
#: ../js/ui/appDisplay.js:751
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:759
#: ../js/ui/appDisplay.js:758
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:1569
#: ../js/ui/appDisplay.js:1571
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:1591 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1597
#: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
#: ../js/ui/appDisplay.js:1606
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "Mostrar detalles"
@ -560,11 +541,11 @@ msgctxt "list saturday"
msgid "S"
msgstr "S"
#: ../js/ui/calendar.js:454
#: ../js/ui/calendar.js:453
msgid "Previous month"
msgstr "Mes anterior"
#: ../js/ui/calendar.js:464
#: ../js/ui/calendar.js:463
msgid "Next month"
msgstr "Siguiente mes"
@ -750,77 +731,77 @@ msgid "Mute"
msgstr "Silenciar"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:957
#: ../js/ui/components/telepathyClient.js:958
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:964
#: ../js/ui/components/telepathyClient.js:965
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:971
#: ../js/ui/components/telepathyClient.js:972
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:978
#: ../js/ui/components/telepathyClient.js:979
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:984
#: ../js/ui/components/telepathyClient.js:985
msgid "%B %d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:994
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:997
#: ../js/ui/components/telepathyClient.js:1001
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:1004
#: ../js/ui/components/telepathyClient.js:1008
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:1011
#: ../js/ui/components/telepathyClient.js:1015
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:1017
#: ../js/ui/components/telepathyClient.js:1021
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:1049
#: ../js/ui/components/telepathyClient.js:1054
#, 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:1153
#: ../js/ui/components/telepathyClient.js:1158
#, javascript-format
msgid "Invitation to %s"
msgstr "Invitación a %s"
@ -828,38 +809,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:1161
#: ../js/ui/components/telepathyClient.js:1166
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1295
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1295
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1300
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1188
#: ../js/ui/components/telepathyClient.js:1193
#, 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:1191
#: ../js/ui/components/telepathyClient.js:1196
#, 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:1205
#: ../js/ui/components/telepathyClient.js:1210
msgid "Answer"
msgstr "Responder"
@ -868,112 +849,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1226
#: ../js/ui/components/telepathyClient.js:1231
#, 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:1255
#: ../js/ui/components/telepathyClient.js:1260
#, 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:1341
#: ../js/ui/components/telepathyClient.js:1346
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1348
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1350
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1347
#: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1351
#: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1353
#: ../js/ui/components/telepathyClient.js:1358
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1360
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1357
#: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1359
#: ../js/ui/components/telepathyClient.js:1364
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1361
#: ../js/ui/components/telepathyClient.js:1366
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1363
#: ../js/ui/components/telepathyClient.js:1368
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1370
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1372
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1369
#: ../js/ui/components/telepathyClient.js:1374
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1371
#: ../js/ui/components/telepathyClient.js:1376
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1373
#: ../js/ui/components/telepathyClient.js:1378
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1375
#: ../js/ui/components/telepathyClient.js:1380
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:1377
#: ../js/ui/components/telepathyClient.js:1382
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1379
#: ../js/ui/components/telepathyClient.js:1384
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:1381
#: ../js/ui/components/telepathyClient.js:1386
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1383
#: ../js/ui/components/telepathyClient.js:1388
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:1385
#: ../js/ui/components/telepathyClient.js:1390
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -982,22 +963,22 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/components/telepathyClient.js:1387
#: ../js/ui/components/telepathyClient.js:1392
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1397
#: ../js/ui/components/telepathyClient.js:1402
#, javascript-format
msgid "Unable to connect to %s"
msgstr "No se pudo conectar a %s"
#: ../js/ui/components/telepathyClient.js:1402
#: ../js/ui/components/telepathyClient.js:1407
msgid "View account"
msgstr "Ver cuenta"
#: ../js/ui/components/telepathyClient.js:1439
#: ../js/ui/components/telepathyClient.js:1444
msgid "Unknown reason"
msgstr "Razón desconocida"
@ -1013,22 +994,22 @@ msgstr "Mostrar aplicaciones"
msgid "Dash"
msgstr "Tablero"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Open Calendar"
msgstr "Abrir calendario"
#: ../js/ui/dateMenu.js:100
#: ../js/ui/dateMenu.js:101
msgid "Open Clocks"
msgstr "Abrir Relojes"
#: ../js/ui/dateMenu.js:107
#: ../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:204
#: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y"
@ -1172,7 +1153,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:645 ../js/ui/status/keyboard.js:339
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
msgid "Keyboard"
msgstr "Teclado"
@ -1228,39 +1209,39 @@ msgstr "Ver fuente"
msgid "Web Page"
msgstr "Página web"
#: ../js/ui/messageTray.js:1325
#: ../js/ui/messageTray.js:1326
msgid "Open"
msgstr "Abrir"
#: ../js/ui/messageTray.js:1332
#: ../js/ui/messageTray.js:1333
msgid "Remove"
msgstr "Quitar"
#: ../js/ui/messageTray.js:1629
#: ../js/ui/messageTray.js:1630
msgid "Notifications"
msgstr "Notificaciones"
#: ../js/ui/messageTray.js:1636
#: ../js/ui/messageTray.js:1637
msgid "Clear Messages"
msgstr "Limpiar mensajes"
#: ../js/ui/messageTray.js:1655
#: ../js/ui/messageTray.js:1656
msgid "Notification Settings"
msgstr "Configuración de las notificaciones"
#: ../js/ui/messageTray.js:1708
#: ../js/ui/messageTray.js:1709
msgid "Tray Menu"
msgstr "Bandeja de menú"
#: ../js/ui/messageTray.js:1925
#: ../js/ui/messageTray.js:1926
msgid "No Messages"
msgstr "No hay mensajes"
#: ../js/ui/messageTray.js:1963
#: ../js/ui/messageTray.js:1964
msgid "Message Tray"
msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2966
#: ../js/ui/messageTray.js:2967
msgid "System Information"
msgstr "Información del sistema"
@ -1306,7 +1287,7 @@ msgstr "Actividades"
msgid "Top Bar"
msgstr "Barra superior"
#: ../js/ui/popupMenu.js:279
#: ../js/ui/popupMenu.js:271
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1314,7 +1295,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command"
msgstr "Introducir un comando"
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
msgid "Close"
msgstr "Cerrar"
@ -1453,7 +1434,7 @@ msgstr "No conectado"
msgid "Brightness"
msgstr "Brillo"
#: ../js/ui/status/keyboard.js:407
#: ../js/ui/status/keyboard.js:403
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
@ -1739,43 +1720,43 @@ msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "La configuración se revertirá en %d segundo"
msgstr[1] "La configuración se revertirá en %d segundos"
#: ../js/ui/windowMenu.js:34
#: ../js/ui/windowMenu.js:33
msgid "Minimize"
msgstr "Minimizar"
#: ../js/ui/windowMenu.js:41
#: ../js/ui/windowMenu.js:40
msgid "Unmaximize"
msgstr "Desmaximizar"
#: ../js/ui/windowMenu.js:45
#: ../js/ui/windowMenu.js:44
msgid "Maximize"
msgstr "Maximizar"
#: ../js/ui/windowMenu.js:52
#: ../js/ui/windowMenu.js:51
msgid "Move"
msgstr "Mover"
#: ../js/ui/windowMenu.js:58
#: ../js/ui/windowMenu.js:57
msgid "Resize"
msgstr "Redimensionar"
#: ../js/ui/windowMenu.js:65
#: ../js/ui/windowMenu.js:64
msgid "Move Titlebar Onscreen"
msgstr "Mover la barra de título a la pantalla"
#: ../js/ui/windowMenu.js:70
#: ../js/ui/windowMenu.js:69
msgid "Always on Top"
msgstr "Siempre encima"
#: ../js/ui/windowMenu.js:89
#: ../js/ui/windowMenu.js:86
msgid "Always on Visible Workspace"
msgstr "Siempre en el área de trabajo visible"
#: ../js/ui/windowMenu.js:106
#: ../js/ui/windowMenu.js:103
msgid "Move to Workspace Up"
msgstr "Subir a un área de trabajo"
#: ../js/ui/windowMenu.js:111
#: ../js/ui/windowMenu.js:108
msgid "Move to Workspace Down"
msgstr "Bajar a un área de trabajo"
@ -1805,21 +1786,21 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
#: ../src/main.c:371
#: ../src/main.c:349
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/main.c:377
#: ../src/main.c:355
msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para la pantalla de inicio"
#: ../src/main.c:383
#: ../src/main.c:361
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Usar un modo específico, por ejemplo, «gdm» para la pantalla de inicio de "
"sesión"
#: ../src/main.c:389
#: ../src/main.c:367
msgid "List possible modes"
msgstr "Listar los modos posibles"
@ -1840,24 +1821,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 "Arrangement of buttons on the titlebar"
#~ msgstr "Orden de los botones en la barra de título"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Esta clave sobrescribe la clave en org.gnome.desktop.wm.preferences al "
#~ "ejecutar GNOME Shell."
#~ msgid "Extension"
#~ msgstr "Extensión"
#~ msgid "Select an extension to configure using the combobox above."
#~ msgstr ""
#~ "Seleccione una extensión que configurar usando la caja combinada de "
#~ "arriba."
#~ msgid "calendar:MY"
#~ msgstr "calendario:MA"

359
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-06-14 22:00+0300\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-05-22 23:44+0300\n"
"PO-Revision-Date: 2014-05-22 23:45+0300\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n"
@ -56,6 +56,7 @@ msgid "Window management and application launching"
msgid "Window management and application launching"
msgstr "ניהול חלונות והרצת יישומים"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extension Preferences"
msgstr "העדפות ההרחבות של GNOME Shell"
@ -122,120 +123,106 @@ msgstr ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "App Picker View"
msgstr "App Picker View"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "Index of the currently selected view in the application picker."
msgstr "Index of the currently selected view in the application picker."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
msgstr "History for command (Alt-F2) dialog"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "History for the looking glass dialog"
msgstr "History for the looking glass dialog"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "Always show the 'Log out' menu item in the user menu."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
msgstr ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Whether to remember password for mounting encrypted or remote filesystems"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
msgstr ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
msgstr ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Whether to remember password for mounting encrypted or remote filesystems"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
msgstr ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Show the week date in the calendar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "If true, display the ISO week date in the calendar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Keybinding to open the application menu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Keybinding to open the application menu."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Keybinding to open the \"Show Applications\" view"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Keybinding to open the overview"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Keybinding to open the Activities Overview."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Keybinding to toggle the visibility of the message tray"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Keybinding to toggle the visibility of the message tray."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Keybinding to focus the active notification"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Keybinding to focus the active notification."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Which keyboard to use"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "The type of keyboard to use."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The maximum accuracy level of location."
msgstr "The maximum accuracy level of location."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures the maximum level of location accuracy applications are allowed "
@ -251,23 +238,11 @@ msgstr ""
"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)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "Limit switcher to current workspace."
msgstr "Limit switcher to current workspace."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
msgstr ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "The application icon mode."
msgstr "The application icon mode."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
@ -277,48 +252,56 @@ msgstr ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
msgstr ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Attach modal dialog to the parent window"
msgstr "Attach modal dialog to the parent window"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Arrangement of buttons on the titlebar"
msgstr "Arrangement of buttons on the titlebar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Enable edge tiling when dropping windows on screen edges"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Workspaces are managed dynamically"
msgstr "Workspaces are managed dynamically"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
msgid "Workspaces only on primary monitor"
msgstr "Workspaces only on primary monitor"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Delay focus changes in mouse mode until the pointer stops moving"
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "אירעה שגיאה בעת טעינת דו־שיח ההעדפות עבור %s:"
#: ../js/extensionPrefs/main.js:157
msgid "GNOME Shell Extensions"
#: ../js/extensionPrefs/main.js:167
msgid "Extension"
msgstr "הרחבה"
#: ../js/extensionPrefs/main.js:191
msgid "Select an extension to configure using the combobox above."
msgstr "יש לבחור את ההרחבה להגדרה באמצעות תיבת הבחירה המשולבת שלהלן."
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
@ -341,25 +324,25 @@ msgctxt "button"
msgctxt "button"
msgid "Sign In"
msgstr "כניסה"
#: ../js/gdm/loginDialog.js:271
msgid "Choose Session"
msgstr "בחירת הפעלה"
#: ../js/gdm/loginDialog.js:431
msgid "Not listed?"
msgstr "לא רשום?"
#: ../js/gdm/loginDialog.js:616
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(משתמש או %s לדוגמה)"
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280
msgid "Username: "
msgstr "שם משתמש:"
#: ../js/gdm/loginDialog.js:924
msgid "Login Window"
msgstr "חלון כניסה"
@ -384,31 +367,31 @@ msgstr "לא ניתן לפענח את הפקודה:"
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "ההרצה של „%s” נכשלה:"
#: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here"
msgstr "יישומים בשימוש תדיר יופיעו כאן"
#: ../js/ui/appDisplay.js:751
msgid "Frequent"
msgstr "תדיר"
#: ../js/ui/appDisplay.js:758
msgid "All"
msgstr "הכול"
#: ../js/ui/appDisplay.js:1571
msgid "New Window"
msgstr "חלון חדש"
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים"
#: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites"
msgstr "הוספה למועדפים"
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "הצגת פרטים"
@ -547,11 +530,11 @@ msgctxt "list saturday"
msgctxt "list saturday"
msgid "S"
msgstr "ש׳"
#: ../js/ui/calendar.js:453
msgid "Previous month"
msgstr "חודש קודם"
#: ../js/ui/calendar.js:463
msgid "Next month"
msgstr "חודש הבא"
@ -735,77 +718,77 @@ msgid "Mute"
msgid "Mute"
msgstr "השתקה"
#. Translators: Time in 24h format */
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:958
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:965
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:972
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" */
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:979
msgid "%B %d, %H%M"
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:985
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:994
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:1001
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:1008
msgid "%A, %l%M %p"
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:1015
msgid "%B %d, %l%M %p"
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:1021
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:1054
#, 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:1158
#, javascript-format
msgid "Invitation to %s"
@ -813,38 +796,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:1166
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "הוזמנת על ידי %s להצטרף אל %s"
#: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1295
msgid "Decline"
msgstr "דחייה"
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1300
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:1193
#, 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:1196
#, 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:1210
msgid "Answer"
msgstr "מענה"
@ -853,108 +836,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:1231
#, 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:1260
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון"
#: ../js/ui/components/telepathyClient.js:1346
msgid "Network error"
msgstr "שגיאת רשת"
#: ../js/ui/components/telepathyClient.js:1348
msgid "Authentication failed"
msgstr "האימות נכשל"
#: ../js/ui/components/telepathyClient.js:1350
msgid "Encryption error"
msgstr "שגיאת הצפנה"
#: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate not provided"
msgstr "לא סופק אישור"
#: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate untrusted"
msgstr "האישור אינו מהימן"
#: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate expired"
msgstr "האישור פג"
#: ../js/ui/components/telepathyClient.js:1358
msgid "Certificate not activated"
msgstr "האישור לא מופעל"
#: ../js/ui/components/telepathyClient.js:1360
msgid "Certificate hostname mismatch"
msgstr "שם המארח באישור אינו תואם"
#: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate fingerprint mismatch"
msgstr "חוסר התאמה בטביעת האצבע של האישור"
#: ../js/ui/components/telepathyClient.js:1364
msgid "Certificate self-signed"
msgstr "אישור בחתימה עצמית"
#: ../js/ui/components/telepathyClient.js:1366
msgid "Status is set to offline"
msgstr "המצב הוגדר ל'מנותק'"
#: ../js/ui/components/telepathyClient.js:1368
msgid "Encryption is not available"
msgstr "ההצפנה אינה זמינה"
#: ../js/ui/components/telepathyClient.js:1370
msgid "Certificate is invalid"
msgstr "האישור אינו תקף"
#: ../js/ui/components/telepathyClient.js:1372
msgid "Connection has been refused"
msgstr "ההתחברות נשללה"
#: ../js/ui/components/telepathyClient.js:1374
msgid "Connection can't be established"
msgstr "לא ניתן להפעיל את החיבור"
#: ../js/ui/components/telepathyClient.js:1376
msgid "Connection has been lost"
msgstr "החיבור אבד"
#: ../js/ui/components/telepathyClient.js:1378
msgid "This account is already connected to the server"
msgstr "חשבון זה כבר מחובר לשרת"
#: ../js/ui/components/telepathyClient.js:1380
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב"
#: ../js/ui/components/telepathyClient.js:1382
msgid "The account already exists on the server"
msgstr "החשבון כבר קיים בשרת"
#: ../js/ui/components/telepathyClient.js:1384
msgid "Server is currently too busy to handle the connection"
msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור"
#: ../js/ui/components/telepathyClient.js:1386
msgid "Certificate has been revoked"
msgstr "האישור נשלל"
#: ../js/ui/components/telepathyClient.js:1388
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה"
#: ../js/ui/components/telepathyClient.js:1390
msgid ""
"The length of the server certificate, or the depth of the server certificate "
@ -962,22 +945,22 @@ msgstr ""
msgstr ""
"אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי "
"ספריית ההצפנה"
#: ../js/ui/components/telepathyClient.js:1392
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:1402
#, javascript-format
msgid "Unable to connect to %s"
msgstr "לא ניתן להתחבר אל %s"
#: ../js/ui/components/telepathyClient.js:1407
msgid "View account"
msgstr "צפייה בחשבון"
#: ../js/ui/components/telepathyClient.js:1444
msgid "Unknown reason"
msgstr "סיבה לא ידועה"
@ -1147,7 +1130,7 @@ msgstr "התקנה"
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
msgid "Keyboard"
msgstr "מקלדת"
@ -1203,39 +1186,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:1964
msgid "Message Tray"
msgstr "אזור דיווח ההודעות"
#: ../js/ui/messageTray.js:2967
msgid "System Information"
msgstr "פרטי המערכת"
@ -1282,7 +1265,7 @@ msgstr "פעילויות"
#: ../js/ui/panel.js:915
msgid "Top Bar"
msgstr "הסרגל העליון"
#: ../js/ui/popupMenu.js:271
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1290,7 +1273,7 @@ msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:74
msgid "Enter a Command"
msgstr "נא להזין פקודה"
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
msgid "Close"
msgstr "סגירה"
@ -1431,7 +1414,7 @@ msgstr "לא מחובר"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "בהירות"
#: ../js/ui/status/keyboard.js:403
msgid "Show Keyboard Layout"
msgstr "הצגת פריסת המקלדת"
@ -1718,43 +1701,43 @@ msgid_plural "Settings changes will revert in %d seconds"
msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "שינויי הגדרות ישוחזרו בעוד שנייה"
msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות"
#: ../js/ui/windowMenu.js:33
msgid "Minimize"
msgstr "מזעור"
#: ../js/ui/windowMenu.js:40
msgid "Unmaximize"
msgstr "ביטול הגדלה"
#: ../js/ui/windowMenu.js:44
msgid "Maximize"
msgstr "הגדלה"
#: ../js/ui/windowMenu.js:51
msgid "Move"
msgstr "הזזה"
#: ../js/ui/windowMenu.js:57
msgid "Resize"
msgstr "שינוי גודל"
#: ../js/ui/windowMenu.js:64
msgid "Move Titlebar Onscreen"
msgstr "הזזת שורת הכותרת על המסך"
#: ../js/ui/windowMenu.js:69
msgid "Always on Top"
msgstr "תמיד עליון"
#: ../js/ui/windowMenu.js:86
msgid "Always on Visible Workspace"
msgstr "הצגה בכל מרחבי העבודה"
#: ../js/ui/windowMenu.js:103
msgid "Move to Workspace Up"
msgstr "הזזה למרחב העבודה שמלמעלה"
#: ../js/ui/windowMenu.js:108
msgid "Move to Workspace Down"
msgstr "הזזה למרחב העבודה שמלמטה"
@ -1784,19 +1767,19 @@ msgstr[1] "%u קלטים"
#: ../src/gvc/gvc-mixer-control.c:2373
msgid "System Sounds"
msgstr "צלילי מערכת"
#: ../src/main.c:349
msgid "Print version"
msgstr "Print version"
#: ../src/main.c:355
msgid "Mode used by GDM for login screen"
msgstr "המצב בו GDM יעשה שימוש לצורך מסך הכניסה"
#: ../src/main.c:361
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "שימוש במצב מסוים, לדוגמה: „gdm“ למסך הכניסה"
#: ../src/main.c:367
msgid "List possible modes"
msgstr "הצגת המצבים האפשריים"
@ -1817,22 +1800,6 @@ msgstr "הססמה לא יכולה להישאר ריקה"
#: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user"
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Arrangement of buttons on the titlebar"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgid "Extension"
#~ msgstr "הרחבה"
#~ msgid "Select an extension to configure using the combobox above."
#~ msgstr "יש לבחור את ההרחבה להגדרה באמצעות תיבת הבחירה המשולבת שלהלן."
#~ msgid "calendar:MY"
#~ msgstr "calendar:YM"

413
po/hu.po

File diff suppressed because it is too large Load Diff

147
po/lt.po
View File

@ -11,8 +11,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-06-22 07:30+0000\n"
"PO-Revision-Date: 2014-06-22 15:56+0300\n"
"POT-Creation-Date: 2014-06-02 19:26+0000\n"
"PO-Revision-Date: 2014-06-02 23:35+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
@ -126,26 +126,18 @@ msgstr ""
"srityje."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "App Picker View"
msgstr "Programos pasirinkimo vaizdas"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "Index of the currently selected view in the application picker."
msgstr "Šiuo metu pasirinkto vaizdo programų vaizde indeksas."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog"
msgstr "Komandų (Alt-F2) dialogo retrospektyva"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "History for the looking glass dialog"
msgstr "Didinamojo stiklo dialogo retrospektyva"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "Visada rodyti naudotojo meniu punktą „Atsijungti“."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
@ -153,13 +145,13 @@ msgstr ""
"Šis raktas perrašo automatinį meniu punkto „Atsijungti“ slėpimą vieno "
"naudotojo, vieno seanso situacijose."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Ar atsiminti slaptažodį prijungiant šifruotas ar nutolusias failų sistemas"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@ -171,77 +163,70 @@ msgstr ""
"žymimasis langelis „Įsiminti slaptažodį“ bus rodomas. Šis raktas nustato "
"numatytąją žymimojo langelio būseną."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Rodyti savaitės dienas kalendoriuje"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Jeigu reikšmė teigiama, kalendoriuje rodyti ISO savaičių datą."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Klavišų susiejimas, kuriuo atveriamas programų meniu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Klavišų susiejimas, kuriuo atveriamas programų meniu."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Klavišų susiejimas, kuriuo atveriamas programų paleidimo vaizdas"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Klavišų susiejimas, kuriuo atveriamas „Programų paleidimas“ veiklų "
"apžvalgoje."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Klavišų susiejimas, kuriuo atveriama apžvalga"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Klavišų susiejimas, kuriuo atveriama veiklų apžvalga."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Klavišų susiejimas pranešimų juostos matomumui perjungti"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Klavišų susiejimas pranešimų juostos matomumui perjungti."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Klavišų susiejimas, kuriuo fokusuojamas aktyvus pranešimas"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Klavišų susiejimas, kuriuo fokusuojamas aktyvus pranešimas."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr ""
"Klavišų susiejimas, kuris sustabdo ir pratęsia visus veikiančius elementus, "
"derinimui"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Kurią klaviatūrą naudoti"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Naudotinas klaviatūros tipas."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The maximum accuracy level of location."
msgstr "Didžiausias vietos tikslumo lygis."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures the maximum level of location accuracy applications are allowed "
"to see. Valid options are 'off' (disable location tracking), 'country', "
@ -257,23 +242,11 @@ msgstr ""
"nustatyti naudotojo vietą pačios naudodamos tinklo išteklius (nors tai "
"suteikia geriausiu atveju gatvės lygmens tikslumą)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "Limit switcher to current workspace."
msgstr "Apriboti perjungėją dabartiniu darbalaukiu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
msgstr ""
"Jei teigiama, perjungimo lange bus rodomas tik programos, turinčios langų "
"dabartiniame darbalaukyje. Priešingu atveju įtraukiamos visos programos."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "The application icon mode."
msgstr "Programos piktogramos veiksena."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -283,36 +256,28 @@ msgstr ""
"„thumbnail-only“ (rodo lango miniatiūrą), „app-icon-only“ (rodo tik "
"programos piktogramą) arba „both“ (abu)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
msgstr ""
"Jei teigiama, perjungimo lange rodomi tik langai iš dabartinio darbalaukio. "
"Priešingu atveju įtraukiami visi langai."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Attach modal dialog to the parent window"
msgstr "Prikabinti modalinį dialogą prie tėvinio lango"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Šis raktas perrašo org.gnome.mutter raktą, kai vykdoma GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Įjungti kraštų išplėtimą, kai langai numetami ekrano kraštuose"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Darbalaukiai yra valdomi dinamiškai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Darbalaukiai tik pagrindiniame monitoriuje"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Atidėti fokuso pakeitimus pelei iki žymiklis nustos judėti"
@ -322,6 +287,7 @@ msgid "There was an error loading the preferences dialog for %s:"
msgstr "Kilo klaida įkeliant %s nustatymų dialogą:"
#: ../js/extensionPrefs/main.js:157
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions"
msgstr "GNOME Shell plėtiniai"
@ -389,31 +355,31 @@ msgstr "Nepavyko perskaityti komandos:"
msgid "Execution of “%s” failed:"
msgstr "Nepavyko įvykdyti „%s“:"
#: ../js/ui/appDisplay.js:641
#: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here"
msgstr "Čia bus matomos dažnai naudojamos programos"
#: ../js/ui/appDisplay.js:752
#: ../js/ui/appDisplay.js:751
msgid "Frequent"
msgstr "Dažnai naudojamos"
#: ../js/ui/appDisplay.js:759
#: ../js/ui/appDisplay.js:758
msgid "All"
msgstr "Visos"
#: ../js/ui/appDisplay.js:1569
#: ../js/ui/appDisplay.js:1571
msgid "New Window"
msgstr "Naujas langas"
#: ../js/ui/appDisplay.js:1591 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Pašalinti iš mėgstamų"
#: ../js/ui/appDisplay.js:1597
#: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites"
msgstr "Pridėti prie mėgstamų"
#: ../js/ui/appDisplay.js:1606
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "Rodyti detalią informaciją"
@ -1002,22 +968,22 @@ msgstr "Paleisti programas"
msgid "Dash"
msgstr "Paleidimo sritis"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Open Calendar"
msgstr "Atverti kalendorių"
#: ../js/ui/dateMenu.js:100
#: ../js/ui/dateMenu.js:101
msgid "Open Clocks"
msgstr "Atverti laikrodžius"
#: ../js/ui/dateMenu.js:107
#: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings"
msgstr "Datos ir laiko nustatymai"
#. 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
#: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y"
msgstr "%A, %Y m. %B %d d."
@ -1222,39 +1188,39 @@ msgstr "Žiūrėti šaltinį"
msgid "Web Page"
msgstr "Tinklalapis"
#: ../js/ui/messageTray.js:1325
#: ../js/ui/messageTray.js:1326
msgid "Open"
msgstr "Atverti"
#: ../js/ui/messageTray.js:1332
#: ../js/ui/messageTray.js:1333
msgid "Remove"
msgstr "Pašalinti"
#: ../js/ui/messageTray.js:1629
#: ../js/ui/messageTray.js:1630
msgid "Notifications"
msgstr "Pranešimai"
#: ../js/ui/messageTray.js:1636
#: ../js/ui/messageTray.js:1637
msgid "Clear Messages"
msgstr "Išvalyti pranešimus"
#: ../js/ui/messageTray.js:1655
#: ../js/ui/messageTray.js:1656
msgid "Notification Settings"
msgstr "Pranešimų nustatymai"
#: ../js/ui/messageTray.js:1708
#: ../js/ui/messageTray.js:1709
msgid "Tray Menu"
msgstr "Dėklo meniu"
#: ../js/ui/messageTray.js:1925
#: ../js/ui/messageTray.js:1926
msgid "No Messages"
msgstr "Nėra pranešimų"
#: ../js/ui/messageTray.js:1963
#: ../js/ui/messageTray.js:1964
msgid "Message Tray"
msgstr "Pranešimų juosta"
#: ../js/ui/messageTray.js:2966
#: ../js/ui/messageTray.js:2967
msgid "System Information"
msgstr "Sistemos informacija"
@ -1805,19 +1771,19 @@ msgstr[2] "%u įvesčių"
msgid "System Sounds"
msgstr "Sistemos garsai"
#: ../src/main.c:371
#: ../src/main.c:349
msgid "Print version"
msgstr "Išvesti versijos numerį"
#: ../src/main.c:377
#: ../src/main.c:355
msgid "Mode used by GDM for login screen"
msgstr "Veiksena, naudojama GDM prisijungimo ekrane"
#: ../src/main.c:383
#: ../src/main.c:361
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Naudoti konkrečią veikseną, pvz., „gdm“ prisijungimo ekranui"
#: ../src/main.c:389
#: ../src/main.c:367
msgid "List possible modes"
msgstr "Išvardinti galimas veiksenas"
@ -1837,3 +1803,4 @@ msgstr "Slaptažodis negali būti tuščias"
#: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user"
msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"

444
po/nb.po

File diff suppressed because it is too large Load Diff

531
po/sl.po

File diff suppressed because it is too large Load Diff

973
po/sv.po

File diff suppressed because it is too large Load Diff

535
po/tr.po

File diff suppressed because it is too large Load Diff

View File

@ -164,45 +164,6 @@ gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
{
}
static gboolean
gnome_shell_plugin_has_swap_event (GnomeShellPlugin *shell_plugin)
{
MetaPlugin *plugin = META_PLUGIN (shell_plugin);
CoglDisplay *cogl_display =
cogl_context_get_display (shell_plugin->cogl_context);
CoglRenderer *renderer = cogl_display_get_renderer (cogl_display);
const char * (* query_extensions_string) (Display *dpy, int screen);
Bool (* query_extension) (Display *dpy, int *error, int *event);
MetaScreen *screen;
MetaDisplay *display;
Display *xdisplay;
const char *glx_extensions;
/* We will only get swap events if Cogl is using GLX */
if (cogl_renderer_get_winsys_id (renderer) != COGL_WINSYS_ID_GLX)
return FALSE;
screen = meta_plugin_get_screen (plugin);
display = meta_screen_get_display (screen);
xdisplay = meta_display_get_xdisplay (display);
query_extensions_string =
(void *) cogl_get_proc_address ("glXQueryExtensionsString");
query_extension =
(void *) cogl_get_proc_address ("glXQueryExtension");
query_extension (xdisplay,
&shell_plugin->glx_error_base,
&shell_plugin->glx_event_base);
glx_extensions =
query_extensions_string (xdisplay,
meta_screen_get_screen_number (screen));
return strstr (glx_extensions, "GLX_INTEL_swap_event") != NULL;
}
static void
gnome_shell_plugin_start (MetaPlugin *plugin)
{
@ -215,8 +176,7 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
backend = clutter_get_default_backend ();
shell_plugin->cogl_context = clutter_backend_get_cogl_context (backend);
shell_plugin->have_swap_event =
gnome_shell_plugin_has_swap_event (shell_plugin);
shell_plugin->have_swap_event = clutter_feature_available (CLUTTER_FEATURE_SWAP_EVENTS);
shell_perf_log_define_event (shell_perf_log_get_default (),
"glx.swapComplete",

View File

@ -34,8 +34,6 @@ extern GType gnome_shell_plugin_get_type (void);
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
#define WM_NAME "GNOME Shell"
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
@ -169,26 +167,6 @@ shell_dbus_init (gboolean replace)
g_object_unref (session);
}
static void
shell_prefs_init (void)
{
ShellGlobal *global = shell_global_get ();
GSettings *settings = shell_global_get_overrides_settings (global);
char **keys, **k, *schema_id;
if (!settings)
return;
g_object_get (G_OBJECT (settings), "schema-id", &schema_id, NULL);
keys = g_settings_list_keys (settings);
for (keys = k = g_settings_list_keys (settings); *k; k++)
meta_prefs_override_preference_schema (*k, schema_id);
g_strfreev (keys);
g_free (schema_id);
}
static void
shell_introspection_init (void)
{
@ -456,8 +434,6 @@ main (int argc, char **argv)
_shell_global_init ("session-mode", session_mode, NULL);
shell_prefs_init ();
ecode = meta_run ();
if (g_getenv ("GNOME_SHELL_ENABLE_CLEANUP"))

View File

@ -1355,37 +1355,6 @@ shell_global_get_settings (ShellGlobal *global)
return global->settings;
}
/**
* shell_global_get_overrides_settings:
* @global: A #ShellGlobal
*
* Get the session overrides GSettings instance.
*
* Return value: (transfer none): The GSettings object
*/
GSettings *
shell_global_get_overrides_settings (ShellGlobal *global)
{
static GSettings *settings = NULL;
const char *schema;
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
if (!settings)
{
if (strcmp (global->session_mode, "classic") == 0)
schema = "org.gnome.shell.extensions.classic-overrides";
else if (strcmp (global->session_mode, "user") == 0)
schema = "org.gnome.shell.overrides";
else
return NULL;
settings = g_settings_new (schema);
}
return settings;
}
/**
* shell_global_get_current_time:
* @global: A #ShellGlobal

View File

@ -35,7 +35,6 @@ GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
MetaDisplay *shell_global_get_display (ShellGlobal *global);
GList *shell_global_get_window_actors (ShellGlobal *global);
GSettings *shell_global_get_settings (ShellGlobal *global);
GSettings *shell_global_get_overrides_settings (ShellGlobal *global);
guint32 shell_global_get_current_time (ShellGlobal *global);

View File

@ -14,6 +14,9 @@ struct _ShellRecorderSrc
GMutex mutex_data;
GMutex *mutex;
GstClock *clock;
GstClockTime last_frame_time;
GstCaps *caps;
GAsyncQueue *queue;
gboolean closed;
@ -35,7 +38,6 @@ enum {
/* Special marker value once the source is closed */
#define RECORDER_QUEUE_END ((GstBuffer *)1)
#define shell_recorder_src_parent_class parent_class
G_DEFINE_TYPE(ShellRecorderSrc, shell_recorder_src, GST_TYPE_PUSH_SRC);
static void
@ -43,7 +45,9 @@ shell_recorder_src_init (ShellRecorderSrc *src)
{
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
gst_base_src_set_live (GST_BASE_SRC (src), TRUE);
gst_base_src_set_do_timestamp (GST_BASE_SRC (src), TRUE);
src->clock = gst_system_clock_obtain ();
src->last_frame_time = 0;
src->queue = g_async_queue_new ();
src->mutex = &src->mutex_data;
@ -81,39 +85,6 @@ shell_recorder_src_update_memory_used (ShellRecorderSrc *src,
g_mutex_unlock (src->mutex);
}
/* _negotiate() is called when we have to decide on a format. We
* use the configured format */
static gboolean
shell_recorder_src_negotiate (GstBaseSrc * base_src)
{
ShellRecorderSrc *src = SHELL_RECORDER_SRC (base_src);
gboolean result;
result = gst_base_src_set_caps (base_src, src->caps);
return result;
}
static gboolean
shell_recorder_src_send_event (GstElement * element, GstEvent * event)
{
ShellRecorderSrc *src = SHELL_RECORDER_SRC (element);
gboolean res;
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
shell_recorder_src_close (src);
gst_event_unref (event);
res = TRUE;
break;
default:
res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element,
event), FALSE);
break;
}
return res;
}
/* The create() virtual function is responsible for returning the next buffer.
* We just pop buffers off of the queue and block if necessary.
*/
@ -129,6 +100,9 @@ shell_recorder_src_create (GstPushSrc *push_src,
buffer = g_async_queue_pop (src->queue);
if (src->last_frame_time == 0)
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
if (buffer == RECORDER_QUEUE_END)
{
/* Returning UNEXPECTED here will cause a EOS message to be sent */
@ -140,6 +114,9 @@ shell_recorder_src_create (GstPushSrc *push_src,
- (int)(gst_buffer_get_size(buffer) / 1024));
*buffer_out = buffer;
GST_BUFFER_DURATION(*buffer_out) = GST_CLOCK_DIFF (src->last_frame_time, gst_clock_get_time (GST_CLOCK (src->clock)));
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
return GST_FLOW_OK;
}
@ -181,6 +158,8 @@ shell_recorder_src_finalize (GObject *object)
g_mutex_clear (src->mutex);
gst_object_unref (src->clock);
G_OBJECT_CLASS (shell_recorder_src_parent_class)->finalize (object);
}
@ -232,7 +211,6 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
GstPushSrcClass *push_src_class = GST_PUSH_SRC_CLASS (klass);
static GstStaticPadTemplate src_template =
@ -245,6 +223,8 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
object_class->set_property = shell_recorder_src_set_property;
object_class->get_property = shell_recorder_src_get_property;
push_src_class->create = shell_recorder_src_create;
g_object_class_install_property (object_class,
PROP_CAPS,
g_param_spec_boxed ("caps",
@ -267,12 +247,6 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
"Generic/Src",
"Feed screen capture data to a pipeline",
"Owen Taylor <otaylor@redhat.com>");
element_class->send_event = shell_recorder_src_send_event;
base_src_class->negotiate = shell_recorder_src_negotiate;
push_src_class->create = shell_recorder_src_create;
}
/**
@ -290,6 +264,7 @@ shell_recorder_src_add_buffer (ShellRecorderSrc *src,
g_return_if_fail (SHELL_IS_RECORDER_SRC (src));
g_return_if_fail (src->caps != NULL);
gst_base_src_set_caps (GST_BASE_SRC (src), src->caps);
shell_recorder_src_update_memory_used (src,
(int)(gst_buffer_get_size(buffer) / 1024));

View File

@ -1059,6 +1059,8 @@ recorder_pipeline_set_caps (RecorderPipeline *pipeline)
#else
"format", G_TYPE_STRING, "xRGB",
#endif
"bpp", G_TYPE_INT, 32,
"depth", G_TYPE_INT, 24,
"framerate", GST_TYPE_FRACTION, pipeline->recorder->framerate, 1,
"width", G_TYPE_INT, pipeline->recorder->area.width,
"height", G_TYPE_INT, pipeline->recorder->area.height,
@ -1541,8 +1543,8 @@ recorder_close_pipeline (ShellRecorder *recorder)
* is written. The bus watch for the pipeline will get it and do
* final cleanup
*/
gst_element_send_event (recorder->current_pipeline->pipeline,
gst_event_new_eos());
shell_recorder_src_close (SHELL_RECORDER_SRC (recorder->current_pipeline->src));
recorder->current_pipeline = NULL;
}
}

View File

@ -21,10 +21,6 @@ struct _ShellTpClientPrivate
ShellTpClientHandleChannelsImpl handle_channels_impl;
gpointer user_data_handle_channels;
GDestroyNotify destroy_handle_channels;
ShellTpClientContactListChangedImpl contact_list_changed_impl;
gpointer user_data_contact_list_changed;
GDestroyNotify destroy_contact_list_changed;
};
/**
@ -83,16 +79,6 @@ struct _ShellTpClientPrivate
* Signature of the implementation of the HandleChannels method.
*/
/**
* ShellTpClientContactListChangedImpl:
* @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
* if possible
* @added: (element-type TelepathyGLib.Contact): a #GPtrArray of added #TpContact
* @removed: (element-type TelepathyGLib.Contact): a #GPtrArray of removed #TpContact
*
* Signature of the implementation of the ContactListChanged method.
*/
static void
shell_tp_client_init (ShellTpClient *self)
{
@ -226,13 +212,6 @@ shell_tp_client_dispose (GObject *object)
self->priv->user_data_handle_channels = NULL;
}
if (self->priv->destroy_contact_list_changed != NULL)
{
self->priv->destroy_contact_list_changed (self->priv->user_data_contact_list_changed);
self->priv->destroy_contact_list_changed = NULL;
self->priv->user_data_contact_list_changed = NULL;
}
if (dispose != NULL)
dispose (object);
}
@ -290,40 +269,3 @@ shell_tp_client_set_handle_channels_func (ShellTpClient *self,
self->priv->user_data_handle_channels = user_data;
self->priv->destroy_handle_channels = destroy;
}
void
shell_tp_client_set_contact_list_changed_func (ShellTpClient *self,
ShellTpClientContactListChangedImpl contact_list_changed_impl,
gpointer user_data,
GDestroyNotify destroy)
{
g_assert (self->priv->contact_list_changed_impl == NULL);
self->priv->contact_list_changed_impl = contact_list_changed_impl;
self->priv->user_data_handle_channels = user_data;
self->priv->destroy_handle_channels = destroy;
}
static void
on_contact_list_changed (TpConnection *conn,
GPtrArray *added,
GPtrArray *removed,
gpointer user_data)
{
ShellTpClient *self = (ShellTpClient *) user_data;
g_assert (self->priv->contact_list_changed_impl != NULL);
self->priv->contact_list_changed_impl (conn,
added, removed,
self->priv->user_data_contact_list_changed);
}
void
shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
TpConnection *conn)
{
g_signal_connect (conn, "contact-list-changed",
G_CALLBACK (on_contact_list_changed),
self);
}

View File

@ -86,19 +86,5 @@ void shell_tp_client_set_handle_channels_func (ShellTpClient *self,
gpointer user_data,
GDestroyNotify destroy);
typedef void (*ShellTpClientContactListChangedImpl) (
TpConnection *connection,
GPtrArray *added,
GPtrArray *removed,
gpointer user_data);
void shell_tp_client_set_contact_list_changed_func (ShellTpClient *self,
ShellTpClientContactListChangedImpl contact_list_changed_impl,
gpointer user_data,
GDestroyNotify destroy);
void shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
TpConnection *conn);
G_END_DECLS
#endif /* __SHELL_TP_CLIENT_H__ */