Compare commits

..

32 Commits

Author SHA1 Message Date
50395cded8 preview 2014-06-13 14:23:24 -04:00
e8ae8f75a0 dateMenu: Fix style 2014-06-13 13:24:10 -04:00
2b93bcf921 kill tray 2 2014-06-13 12:29:27 -04:00
a80b8f7791 kill tray 2014-06-13 12:21:39 -04:00
62c6563a3a always expanded 2014-06-13 12:21:39 -04:00
c22068d288 layout: Remove the tray pressure barrier
Since we don't have a tray at the bottom of the screen anymore, it isn't
needed for triggering.
2014-06-13 12:21:36 -04:00
d519a0a181 messageTray: Remove support for transient notifications
Transient notifications have used for lots of different "system status"
notifications, like network, low power, low disk space, etc. However, a
majority of these notifications should really also be persistent
instead of going away after they appear.

Users have reported getting confused after seeing a notification appear
up in the corner of their eye, and then have no record of what it was
since the tray was empty.

To simplify the code, set the users more at ease, and also make things
like low power and low disk space more noticeable and urgent after they
go away.

Applications can and should explicitly close any notification it wants
to when state changes, so these notifications shouldn't linger if the
user e.g. plugs in his power cable, or clears up some disk space.
2014-06-13 10:30:34 -04:00
ef1ab043a3 messageTray: Add notification close button inside notification
And remove the old close button outside it.
2014-06-12 13:58:16 -04:00
fa350bf41e messageTray: Implement new notification designs
Rather than use an StTable, a custom ShellGenericContainer, and plenty
of hacky style classes, replace them all with standard BoxLayouts and
Bins.

Remove the customContent parameter in favor of subclasses setting the
child of this._bodyBin instead.

With this comes a whole new notification implementation to implement
the new notification designs.

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 some other
layout logic. But since the design of notifications is changing
substantially anyways, I don't feel too bad...
2014-06-12 13:58:15 -04:00
ae74dbd1bb 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-12 13:58:15 -04:00
afa5a871b3 messageTray: Remove addBody as a public API
As it's unused.
2014-06-12 13:58:15 -04:00
e13c0ca9e8 messageTray: Remove support for notifications with images
This sufficiently complicates the code, and won't fit in the
new design.
2014-06-12 13:58:15 -04:00
f29d1beb3e 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-12 13:58:14 -04:00
751a1b5bbe 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-12 13:58:14 -04:00
00a32f53f5 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-12 13:58:14 -04:00
94688d354f telepathyClient: Remove all the fancy features
This can be done with another app, like Empathy or Chat.
2014-06-12 13:58:14 -04:00
7f17acd0ea 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-12 13:58:13 -04:00
8c74a4fee0 messageTray: Remove an unused variable 2014-06-12 13:58:13 -04:00
234b90ac86 messageTray: Don't use a member variable when we can use a local
Tiny cleanup.
2014-06-12 13:31:39 -04:00
ce46b06f36 Updated Spanish translation 2014-06-12 17:52:25 +02:00
585930123d layout: Do not expand struts to screen edges
set_builtin_struts() in mutter now handles this for us, so we can kill
off the extra code here.

https://bugzilla.gnome.org/show_bug.cgi?id=730527
2014-06-12 15:36:40 +02:00
5d00c1a5ee appDisplay: Use GrabHelper for folder popups
As clicks outside the app picker should still be handled normally
while clicks inside should dismiss the popup, we cannot make full
use of GrabHelper. However using it at least for focus handling
fixes some minor details we are getting wrong, for instance not
restoring the previous focus after dismissing a folder popup.
2014-06-11 23:24:30 +02:00
f288c43e6e viewSelector: Use clutter constant instead of true 2014-06-10 21:22:51 +02:00
b981a591c7 main: Actually use the correct schema for overrides
Fix commit ae2751a68b to not only pick up the keys from the
correct schema, but also use the correct schema-id for the overrides.
2014-06-10 13:00:57 +02:00
3b7756b610 data: Do not convert 'button-layout' setting
It has been removed from our overrides schema ...
2014-06-10 12:32:28 +02:00
292f87caf7 sessionMode: Don't set overridesSchema
Unused since commit ae2751a68b.
2014-06-09 22:39:15 +02:00
ae2751a68b main: Move pref overrides back into C
Commit 6c2f3d1d17 moved pref overrides into JS to implement
session mode specific overrides in a clean and generic way.
However that approach comes with a cost - doing the overrides only
after having handled over control to JS means that the core will
be initialized with the non-overridden settings before changing
to the correct values. In the best case this is unnecessary work,
but it can in fact have a worse effect: when initializing workspaces,
we will restore the previous number of workspaces when using
dynamic-workspaces and reset to the configured number otherwise.
As the non-overridden default for dynamic-workspaces is FALSE, we
can easily end up moving the user's windows to the "wrong" workspace.

Now GSettings is expected to grow support for session specific defaults,
which will render our entire override system obsolete (yay!). Given
that, it seems acceptable to use a less generic (and uglier) approach
in the meanwhile, in order to fix aforementioned problems. So move
overrides back before core initialization and just hardcode the
session-mode => override-schema relation.

https://bugzilla.gnome.org/show_bug.cgi?id=695487
2014-06-09 21:52:03 +02:00
589becbc79 panelMenu: Clean up code a bit 2014-06-08 22:25:27 +02:00
4c7fcf272c Updated Turkish translation 2014-06-05 23:34:50 +00:00
e51aecee03 Updated Hungarian translation 2014-06-05 11:23:27 +00:00
d98e7dbd4a screenshot: Also validate parameters to FlashArea()
Apply the same parameter validation to FlashArea() we already use
for ScreenshotArea().

https://bugzilla.gnome.org/show_bug.cgi?id=731220
2014-06-04 18:12:31 +02:00
1b97778925 Updated Norwegian bokmål translation from Åka Sikrom. 2014-06-03 19:55:46 +02:00
27 changed files with 1277 additions and 2189 deletions

View File

@ -1,5 +1,4 @@
[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

@ -1491,54 +1491,38 @@ StScrollBar StButton#vhandle:active {
/* Message Tray */
.notification-drawer {
background: rgba(0,0,0,0.8);
padding: 1em;
border: 2px solid #4c4c4c;
border-bottom: 0px;
border-radius: 6px 6px 0 0;
}
.system-tray-icons,
.notification-drawer-footer-actions {
spacing: 0.5em;
}
.system-tray-icon-button,
.notification-drawer-button {
border-radius: 4px;
border: 1px solid #4c4c4c;
padding: 4px;
}
.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;
#message-tray {
background: #2e3436 url(message-tray-background.png);
background-repeat: repeat;
height: 72px;
}
.url-highlighter {
link-color: #ccccff;
}
.notification, #notification-container, .notification-drawer {
.notification, #notification-container {
font-size: 11pt;
width: 34em;
}
.notification-main-button,
.notification-button {
background: rgba(0,0,0,0.9);
}
.notification-main-button {
border-radius: 10px 10px 0px 0px;
}
.notification-main-content {
padding: 8px;
spacing: 8px;
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.8);
}
.notification-close-button {
padding: 8px;
border-radius: 4px;
}
.notification-action-area {
@ -1547,7 +1531,6 @@ StScrollBar StButton#vhandle:active {
.notification-action-area,
.notification-button {
background: rgba(0,0,0,0.8);
border-top: 1px solid #666;
}
@ -1556,10 +1539,13 @@ StScrollBar StButton#vhandle:active {
border-right: 1px solid #666;
}
.notification-button:hover {
background: rgba(255,255,255,0.3);
.notification-main-button:hover,
.notification-button:hover,
.notification-close-button:hover {
background: rgba(100,100,100,0.9);
}
.notification-main-button:active,
.notification-button:active {
background: rgba(255,255,255,0.1);
}
@ -1700,28 +1686,6 @@ 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;
@ -2627,3 +2591,7 @@ StScrollBar StButton#vhandle:active {
-boxpointer-gap: 4px;
-arrow-rise: 0px;
}
.top-bar-notification-preview {
font-weight: normal;
}

View File

@ -16,6 +16,7 @@ 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;
@ -1249,18 +1250,7 @@ const AppFolderPopup = new Lang.Class({
function() {
this.actor.destroy();
}));
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;
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
},
toggle: function() {
@ -1274,6 +1264,12 @@ 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);
@ -1282,7 +1278,6 @@ const AppFolderPopup = new Lang.Class({
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
this._isOpen = true;
this.emit('open-state-changed', true);
},
@ -1290,6 +1285,8 @@ 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

@ -416,7 +416,6 @@ const AutorunTransientNotification = new Lang.Class({
// set the notification to transient and urgent, so that it
// expands out
this.setTransient(true);
this.setUrgency(MessageTray.Urgency.CRITICAL);
},

View File

@ -735,11 +735,7 @@ const ChatNotification = new Lang.Class({
}
this._lastMessageBox = new St.BoxLayout({ vertical: false });
let revealer = new MessageTray.Revealer(body);
this._lastMessageBox.add(revealer, props.childProps);
revealer.show(true);
this._lastMessageBox.add(body, props.childProps);
this._bodyBox.add_child(this._lastMessageBox);
let timestamp = props.timestamp;

View File

@ -18,8 +18,7 @@ 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();
@ -33,7 +32,7 @@ function _onVertSepRepaint (area)
cr.setLineWidth(stippleWidth);
cr.stroke();
cr.$dispose();
};
}
const DateMenuButton = new Lang.Class({
Name: 'DateMenuButton',

View File

@ -22,6 +22,11 @@ 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
@ -969,43 +974,6 @@ 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);
@ -1048,10 +1016,10 @@ const HotCorner = new Lang.Class({
this._setupFallbackCornerIfNeeded(layoutManager);
this._pressureBarrier = new TriggerablePressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
HOT_CORNER_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW);
this._pressureBarrier = new PressureBarrier(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.
@ -1229,12 +1197,14 @@ 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.reset();
this._isTriggered = false;
this._reset();
},
addBarrier: function(barrier) {
@ -1263,10 +1233,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) {
@ -1287,21 +1257,12 @@ 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];
@ -1314,75 +1275,21 @@ 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();
},
_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._reset();
this._isTriggered = false;
},
_trigger: function() {
this._isTriggered = true;
this.emit('trigger');
this.reset();
},
_onBarrierLeft: function() {
this.parent();
this._isTriggered = false;
this._reset();
},
_onBarrierHit: function(barrier, event) {
@ -1391,17 +1298,37 @@ const TriggerablePressureBarrier = new Lang.Class({
if (this._isTriggered)
return;
if (!this._shouldUseEvent(barrier, event))
if (this._eventFilter && this._eventFilter(event))
return;
if (distance >= this.threshold) {
// 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) {
this._trigger();
return;
}
this._appendEvent(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;
if (this.currentPressure >= this.threshold)
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)
this._trigger();
},
}
});
Signals.addSignalMethods(PressureBarrier.prototype);

View File

@ -74,7 +74,6 @@ let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let _a11ySettings = null;
let dynamicWorkspacesSchema = null;
function _sessionUpdated() {
_loadDefaultStylesheet();
@ -111,7 +110,6 @@ function start() {
sessionMode = new SessionMode.SessionMode();
sessionMode.connect('updated', _sessionUpdated);
_initializePrefs();
_initializeUI();
shellDBusService = new ShellDBus.GnomeShell();
@ -120,17 +118,6 @@ 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
@ -163,8 +150,8 @@ function _initializeUI() {
if (LoginManager.canLock())
screenShield = new ScreenShield.ScreenShield();
panel = new Panel.Panel();
messageTray = new MessageTray.MessageTray();
panel = new Panel.Panel();
keyboard = new Keyboard.Keyboard();
notificationDaemon = new NotificationDaemon.NotificationDaemon();
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
@ -294,7 +281,6 @@ function notify(msg, details) {
let source = new MessageTray.SystemNotificationSource();
messageTray.add(source);
let notification = new MessageTray.Notification(source, msg, details);
notification.setTransient(true);
source.notify(notification);
}

File diff suppressed because it is too large Load Diff

View File

@ -105,10 +105,16 @@ 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) {
@ -149,40 +155,41 @@ const FdoNotificationDaemon = new Lang.Class({
return null;
},
_lookupSource: function(title, pid) {
_lookupSource: function(title, pid, trayIcon) {
for (let i = 0; i < this._sources.length; i++) {
let source = this._sources[i];
if (source.pid == pid && source.initialTitle == title)
if (source.pid == pid &&
(source.initialTitle == title || source.trayIcon || trayIcon))
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) {
_getSource: function(title, pid, ndata, sender, trayIcon) {
if (!pid && !(ndata && ndata.notification))
return null;
// We use notification's source for the notifications we still have
// around that are getting replaced because we don't keep sources
// for transient notifications in this._sources, but we still want
// the notification associated with them to get replaced correctly.
if (ndata && ndata.notification)
return ndata.notification.source;
let source = this._lookupSource(title, pid);
let source = this._lookupSource(title, pid, trayIcon);
if (source) {
source.setTitle(title);
return source;
}
let source = new FdoNotificationDaemonSource(title, pid, sender, ndata ? ndata.hints['desktop-entry'] : null);
let source = new FdoNotificationDaemonSource(title, pid, sender, trayIcon, ndata ? ndata.hints['desktop-entry'] : null);
this._sources.push(source);
source.connect('destroy', Lang.bind(this, function() {
@ -411,9 +418,6 @@ const FdoNotificationDaemon = new Lang.Class({
notification.setUrgency(MessageTray.Urgency.CRITICAL);
break;
}
// '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);
let sourceGIcon = source.useNotificationIcon ? gicon : null;
source.processNotification(notification, sourceGIcon);
@ -474,15 +478,26 @@ const FdoNotificationDaemon = new Lang.Class({
this._dbusImpl.emit_signal('ActionInvoked',
GLib.Variant.new('(us)', [id, action]));
},
_onTrayIconAdded: function(o, icon) {
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, appId) {
_init: function(title, pid, sender, trayIcon, 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);
@ -502,6 +517,12 @@ 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() {
@ -517,15 +538,17 @@ 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.
if (this.app)
// 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)
this.destroy();
},
processNotification: function(notification, gicon) {
if (gicon)
this._gicon = gicon;
this.iconUpdated();
if (!this.trayIcon)
this.iconUpdated();
let tracker = Shell.WindowTracker.get_default();
if (this.app && tracker.focus_app == this.app)
@ -534,6 +557,29 @@ const FdoNotificationDaemonSource = new Lang.Class({
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;
@ -541,6 +587,16 @@ 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)
@ -566,7 +622,8 @@ const FdoNotificationDaemonSource = new Lang.Class({
},
_lastNotificationRemoved: function() {
this.destroy();
if (!this.trayIcon)
this.destroy();
},
openApp: function() {
@ -587,7 +644,11 @@ const FdoNotificationDaemonSource = new Lang.Class({
},
createIcon: function(size) {
if (this.app) {
if (this.trayIcon) {
return new Clutter.Clone({ width: size,
height: size,
source: this.trayIcon });
} else if (this.app) {
return this.app.create_icon_texture(size);
} else if (this._gicon) {
return new St.Icon({ gicon: this._gicon,

View File

@ -72,7 +72,6 @@ const ShellInfo = new Lang.Class({
let notification = null;
if (this._source.notifications.length == 0) {
notification = new MessageTray.Notification(this._source, text, null);
notification.setTransient(true);
notification.setForFeedback(forFeedback);
} else {
notification = this._source.notifications[0];
@ -263,6 +262,8 @@ 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,6 +396,111 @@ 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,
@ -424,6 +529,9 @@ 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

@ -862,11 +862,56 @@ const AggregateMenu = new Lang.Class({
},
});
const DateMenuButton2 = new Lang.Class({
Name: 'DateMenuButton2',
_init: function() {
this.container = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._notificationPreview = Main.messageTray.notificationPreview;
this.container.add_child(this._notificationPreview.actor);
this._notificationPreview.actor.x_expand = true;
this._notificationPreview.actor.x_align = Clutter.ActorAlign.CENTER;
this._notificationPreview.connect('updated', Lang.bind(this, this._sync));
let dateMenu = new imports.ui.dateMenu.DateMenuButton();
this._clock = dateMenu.container;
this._clock.x_expand = true;
this._clock.x_align = Clutter.ActorAlign.CENTER;
this.container.add_child(this._clock);
this._currentlyShowing = 'clock';
this._sync();
},
_show: function(which, animate) {
if (this._currentlyShowing == which)
return;
this._currentlyShowing = which;
if (this._currentlyShowing == 'clock') {
this._notificationPreview.actor.visible = false;
this._clock.visible = true;
} else if (this._currentlyShowing == 'notification') {
this._notificationPreview.actor.visible = true;
this._clock.visible = false;
}
},
_sync: function() {
if (this._currentlyShowing == 'clock' && this._notificationPreview.hasNotification)
this._show('notification', true);
else if (this._currentlyShowing == 'notification' && !this._notificationPreview.hasNotification)
this._show('clock', false);
},
});
Signals.addSignalMethods(DateMenuButton2.prototype);
const PANEL_ITEM_IMPLEMENTATIONS = {
'activities': ActivitiesButton,
'aggregateMenu': AggregateMenu,
'appMenu': AppMenuButton,
'dateMenu': imports.ui.dateMenu.DateMenuButton,
'dateMenu': DateMenuButton2,
'a11y': imports.ui.status.accessibility.ATIndicator,
'a11yGreeter': imports.ui.status.accessibility.ATGreeterIndicator,
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,

View File

@ -41,8 +41,7 @@ const ButtonBox = new Lang.Class({
},
_getPreferredWidth: function(actor, forHeight, alloc) {
let children = actor.get_children();
let child = children.length > 0 ? children[0] : null;
let child = actor.get_first_child();
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
@ -55,8 +54,7 @@ const ButtonBox = new Lang.Class({
},
_getPreferredHeight: function(actor, forWidth, alloc) {
let children = actor.get_children();
let child = children.length > 0 ? children[0] : null;
let child = actor.get_first_child();
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
@ -66,13 +64,11 @@ const ButtonBox = new Lang.Class({
},
_allocate: function(actor, box, flags) {
let children = actor.get_children();
if (children.length == 0)
let child = actor.get_first_child();
if (!child)
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

@ -68,6 +68,13 @@ 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);
@ -80,11 +87,10 @@ const ScreenshotService = new Lang.Class({
ScreenshotAreaAsync : function (params, invocation) {
let [x, y, width, height, flash, filename, callback] = 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");
if (!this._checkArea(x, y, width, height)) {
invocation.return_error_literal(Gio.IOErrorEnum,
Gio.IOErrorEnum.CANCELLED,
"Invalid params");
return;
}
let screenshot = new Shell.Screenshot();
@ -126,9 +132,17 @@ const ScreenshotService = new Lang.Class({
}));
},
FlashArea: function(x, y, width, height) {
FlashAreaAsync: function(params, invocation) {
let [x, y, width, height] = params;
if (!this._checkArea(x, y, width, height)) {
invocation.return_error_literal(Gio.IOErrorEnum,
Gio.IOErrorEnum.CANCELLED,
"Invalid params");
return;
}
let flashspot = new Flashspot({ x : x, y : y, width: width, height: height});
flashspot.fire();
invocation.return_value(null);
}
});

View File

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

View File

@ -253,7 +253,6 @@ const ShellUnmountNotifier = new Lang.Class({
if (!this._notification) {
this._notification = new MessageTray.Notification(this, header, text);
this._notification.setTransient(true);
this._notification.setUrgency(MessageTray.Urgency.CRITICAL);
} else {
this._notification.update(header, text);
@ -270,7 +269,6 @@ const ShellUnmountNotifier = new Lang.Class({
if (message) {
let notification = new MessageTray.Notification(this, message, null);
notification.setTransient(true);
this.notify(notification);
}

View File

@ -1632,7 +1632,6 @@ const NMApplet = new Lang.Class({
let gicon = new Gio.ThemedIcon({ name: iconName });
this._notification = new MessageTray.Notification(this._source, title, text, { gicon: gicon });
this._notification.setUrgency(urgency);
this._notification.setTransient(true);
this._notification.connect('destroy', function() {
this._notification = null;
});

View File

@ -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 true;
return Clutter.EVENT_STOP;
} else if (symbol == Clutter.ISO_Left_Tab) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false);
return true;
return Clutter.EVENT_STOP;
}
}
return Clutter.EVENT_PROPAGATE;

View File

@ -199,12 +199,19 @@ 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 = new Gio.Settings({ schema: Main.dynamicWorkspacesSchema });
this._workspaceSettings = this._getWorkspaceSettings();
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: 'org.gnome.mutter' });
},
_checkWorkspaces: function() {
let i;
let emptyWorkspaces = [];

209
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-05-20 07:27+0000\n"
"PO-Revision-Date: 2014-05-20 19:10+0200\n"
"POT-Creation-Date: 2014-06-11 07:31+0000\n"
"PO-Revision-Date: 2014-06-12 17:23+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,7 +55,6 @@ 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"
@ -270,49 +269,33 @@ msgstr ""
"Esta clave sobrescribe la clave en org.gnome.mutter al ejecutar GNOME Shell."
#: ../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:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Las áreas de trabajo se gestionan dinámicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabajo solo en la pantalla principal"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
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:127
#: ../js/extensionPrefs/main.js:125
#, 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: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/extensionPrefs/main.js:157
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions"
msgstr "Extensiones de GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
@ -335,25 +318,25 @@ msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:271
#: ../js/gdm/loginDialog.js:269
msgid "Choose Session"
msgstr "Elegir sesión"
#: ../js/gdm/loginDialog.js:431
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:616
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(ej., usuario o %s)"
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280
msgid "Username: "
msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:924
#: ../js/gdm/loginDialog.js:922
msgid "Login Window"
msgstr "Ventana de inicio de sesión"
@ -541,11 +524,11 @@ msgctxt "list saturday"
msgid "S"
msgstr "S"
#: ../js/ui/calendar.js:453
#: ../js/ui/calendar.js:454
msgid "Previous month"
msgstr "Mes anterior"
#: ../js/ui/calendar.js:463
#: ../js/ui/calendar.js:464
msgid "Next month"
msgstr "Siguiente mes"
@ -731,77 +714,77 @@ msgid "Mute"
msgstr "Silenciar"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:957
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:965
#: ../js/ui/components/telepathyClient.js:964
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:972
#: ../js/ui/components/telepathyClient.js:971
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:979
#: ../js/ui/components/telepathyClient.js:978
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:985
#: ../js/ui/components/telepathyClient.js:984
msgid "%B %d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:994
#: ../js/ui/components/telepathyClient.js:990
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:1001
#: ../js/ui/components/telepathyClient.js:997
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:1008
#: ../js/ui/components/telepathyClient.js:1004
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:1015
#: ../js/ui/components/telepathyClient.js:1011
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:1021
#: ../js/ui/components/telepathyClient.js:1017
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:1054
#: ../js/ui/components/telepathyClient.js:1049
#, 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:1158
#: ../js/ui/components/telepathyClient.js:1153
#, javascript-format
msgid "Invitation to %s"
msgstr "Invitación a %s"
@ -809,38 +792,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:1166
#: ../js/ui/components/telepathyClient.js:1161
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1295
#: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1290
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1295
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1193
#: ../js/ui/components/telepathyClient.js:1188
#, 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:1196
#: ../js/ui/components/telepathyClient.js:1191
#, 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:1210
#: ../js/ui/components/telepathyClient.js:1205
msgid "Answer"
msgstr "Responder"
@ -849,112 +832,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1231
#: ../js/ui/components/telepathyClient.js:1226
#, 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:1260
#: ../js/ui/components/telepathyClient.js:1255
#, 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:1346
#: ../js/ui/components/telepathyClient.js:1341
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1343
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1350
#: ../js/ui/components/telepathyClient.js:1345
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1352
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1354
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1362
#: ../js/ui/components/telepathyClient.js:1357
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1364
#: ../js/ui/components/telepathyClient.js:1359
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1361
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1363
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1370
#: ../js/ui/components/telepathyClient.js:1365
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1372
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1374
#: ../js/ui/components/telepathyClient.js:1369
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1376
#: ../js/ui/components/telepathyClient.js:1371
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1378
#: ../js/ui/components/telepathyClient.js:1373
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1380
#: ../js/ui/components/telepathyClient.js:1375
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:1382
#: ../js/ui/components/telepathyClient.js:1377
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1384
#: ../js/ui/components/telepathyClient.js:1379
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:1386
#: ../js/ui/components/telepathyClient.js:1381
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1388
#: ../js/ui/components/telepathyClient.js:1383
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:1390
#: ../js/ui/components/telepathyClient.js:1385
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -963,22 +946,22 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/components/telepathyClient.js:1392
#: ../js/ui/components/telepathyClient.js:1387
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1402
#: ../js/ui/components/telepathyClient.js:1397
#, javascript-format
msgid "Unable to connect to %s"
msgstr "No se pudo conectar a %s"
#: ../js/ui/components/telepathyClient.js:1407
#: ../js/ui/components/telepathyClient.js:1402
msgid "View account"
msgstr "Ver cuenta"
#: ../js/ui/components/telepathyClient.js:1444
#: ../js/ui/components/telepathyClient.js:1439
msgid "Unknown reason"
msgstr "Razón desconocida"
@ -1153,7 +1136,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:335
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "Teclado"
@ -1287,7 +1270,7 @@ msgstr "Actividades"
msgid "Top Bar"
msgstr "Barra superior"
#: ../js/ui/popupMenu.js:271
#: ../js/ui/popupMenu.js:279
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1295,7 +1278,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command"
msgstr "Introducir un comando"
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
msgid "Close"
msgstr "Cerrar"
@ -1434,7 +1417,7 @@ msgstr "No conectado"
msgid "Brightness"
msgstr "Brillo"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:407
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
@ -1720,43 +1703,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:33
#: ../js/ui/windowMenu.js:34
msgid "Minimize"
msgstr "Minimizar"
#: ../js/ui/windowMenu.js:40
#: ../js/ui/windowMenu.js:41
msgid "Unmaximize"
msgstr "Desmaximizar"
#: ../js/ui/windowMenu.js:44
#: ../js/ui/windowMenu.js:45
msgid "Maximize"
msgstr "Maximizar"
#: ../js/ui/windowMenu.js:51
#: ../js/ui/windowMenu.js:52
msgid "Move"
msgstr "Mover"
#: ../js/ui/windowMenu.js:57
#: ../js/ui/windowMenu.js:58
msgid "Resize"
msgstr "Redimensionar"
#: ../js/ui/windowMenu.js:64
#: ../js/ui/windowMenu.js:65
msgid "Move Titlebar Onscreen"
msgstr "Mover la barra de título a la pantalla"
#: ../js/ui/windowMenu.js:69
#: ../js/ui/windowMenu.js:70
msgid "Always on Top"
msgstr "Siempre encima"
#: ../js/ui/windowMenu.js:86
#: ../js/ui/windowMenu.js:89
msgid "Always on Visible Workspace"
msgstr "Siempre en el área de trabajo visible"
#: ../js/ui/windowMenu.js:103
#: ../js/ui/windowMenu.js:106
msgid "Move to Workspace Up"
msgstr "Subir a un área de trabajo"
#: ../js/ui/windowMenu.js:108
#: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down"
msgstr "Bajar a un área de trabajo"
@ -1786,21 +1769,21 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
#: ../src/main.c:349
#: ../src/main.c:371
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/main.c:355
#: ../src/main.c:377
msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para la pantalla de inicio"
#: ../src/main.c:361
#: ../src/main.c:383
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:367
#: ../src/main.c:389
msgid "List possible modes"
msgstr "Listar los modos posibles"
@ -1821,6 +1804,24 @@ 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"

413
po/hu.po

File diff suppressed because it is too large Load Diff

442
po/nb.po

File diff suppressed because it is too large Load Diff

405
po/tr.po
View File

@ -11,10 +11,9 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-05-17 23:09+0000\n"
"PO-Revision-Date: 2014-05-19 14:40+0300\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-05 07:25+0000\n"
"PO-Revision-Date: 2014-06-05 23:19+0000\n"
"Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
"Language: tr\n"
@ -22,7 +21,6 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System"
@ -58,7 +56,6 @@ msgid "Window management and application launching"
msgstr "Pencere yönetimi ve uygulama başlatma"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extension Preferences"
msgstr "GNOME Kabuğu Eklenti Tercihleri"
@ -72,16 +69,13 @@ msgstr "GNOME Kabuğu (wayland bestecisi)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Geliştirici ve deneme yapanlar için Alt-F2' den ulaşılan araçları etkinleştir"
msgstr "Geliştirici ve deneme yapanlar için Alt-F2' den ulaşılan araçları etkinleştir"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:2
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
msgstr ""
"Alt-F2 kutucuğu ile bütünleşik hata ayıklama ve izleme uygulamalarına erişim "
"sağlar."
msgstr "Alt-F2 kutucuğu ile bütünleşik hata ayıklama ve izleme uygulamalarına erişim sağlar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
msgid "UUIDs of extensions to enable"
@ -89,16 +83,11 @@ msgstr "Etkinleştirilecek uzantıların UUID'si"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which "
"should be loaded. Any extension that wants to be loaded needs to be in this "
"list. You can also manipulate this list with the EnableExtension and "
"GNOME Shell extensions have a UUID property; this key lists extensions which"
" should be loaded. Any extension that wants to be loaded needs to be in this"
" list. You can also manipulate this list with the EnableExtension and "
"DisableExtension D-Bus methods on org.gnome.Shell."
msgstr ""
"GNOME Kabuğu eklentilerinde UUID adlı bir özellik bulunur; bu anahtar, "
"yüklenmesi gereken uzantıları listeler. Yüklenmesi istenen her tür uzantının "
"bu listede olması gerekir. Ayrıca bu listeyi, org.gnome.Shell üzerindeki "
"EnableExtension ve DisableExtension DBus yöntemleri ile de "
"değiştirebilirsiniz."
msgstr "GNOME Kabuğu eklentilerinde UUID adlı bir özellik bulunur; bu anahtar, yüklenmesi gereken uzantıları listeler. Yüklenmesi istenen her tür uzantının bu listede olması gerekir. Ayrıca bu listeyi, org.gnome.Shell üzerindeki EnableExtension ve DisableExtension DBus yöntemleri ile de değiştirebilirsiniz."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Disables the validation of extension version compatibility"
@ -109,11 +98,7 @@ msgid ""
"GNOME Shell will only load extensions that claim to support the current "
"running version. Enabling this option will disable this check and try to "
"load all extensions regardless of the versions they claim to support."
msgstr ""
"GNOME Kabuğu sadece mevcut çalışan sürümü desteklediklerini ileri süren "
"uzantıları yükleyecektir. Bu seçeneği etkinleştirmek bu denetimi devre dışı "
"bırakacak ve desteklendiği ileri sürülen sürümleri dikkate almaksızın, tüm "
"uygulamaları yüklemeye çalışacaktır."
msgstr "GNOME Kabuğu sadece mevcut çalışan sürümü desteklediklerini ileri süren uzantıları yükleyecektir. Bu seçeneği etkinleştirmek bu denetimi devre dışı bırakacak ve desteklendiği ileri sürülen sürümleri dikkate almaksızın, tüm uygulamaları yüklemeye çalışacaktır."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -121,10 +106,9 @@ msgstr "Sık kullanılan uygulamalar için masa üstü dosyalarının ID listesi
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
"Bu tanımlayıcıya sahip uygulamalar sık kullanılanlar bölümünde gösterilecek."
"The applications corresponding to these identifiers will be displayed in the"
" favorites area."
msgstr "Bu tanımlayıcıya sahip uygulamalar sık kullanılanlar bölümünde gösterilecek."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
@ -140,17 +124,14 @@ msgstr "Kullanıcı menüsünde 'Oturumu Kapat' menü öğesini daima göster."
#: ../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 ""
"Bu ayar tek kullanıcı oturum açtığında 'Oturumu Kapat' menü ögesinin "
"gizlenmesini önler."
"This key overrides the automatic hiding of the 'Log out' menu item in "
"single-user, single-session situations."
msgstr "Bu ayar tek kullanıcı oturum açtığında 'Oturumu Kapat' menü ögesinin gizlenmesini önler."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Şifreli ya da uzak dosya sistemlerini bağlamak için parolanın hatırlanması"
msgstr "Şifreli ya da uzak dosya sistemlerini bağlamak için parolanın hatırlanması"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
@ -158,11 +139,7 @@ msgid ""
"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 ""
"Kabuk, şifreli bir cihaz ya da uzak dosya sistemi bağlandığında parola "
"isteyecek. Eğer parola gelecekte kullanılmak üzere kaydedilebiliyorsa, "
"'Parolayı Hatırla' onay kutusu sunulacak. Bu anahtar, onay kutusunun "
"öntanımlı durumunu belirler."
msgstr "Kabuk, şifreli bir cihaz ya da uzak dosya sistemi bağlandığında parola isteyecek. Eğer parola gelecekte kullanılmak üzere kaydedilebiliyorsa, 'Parolayı Hatırla' onay kutusu sunulacak. Bu anahtar, onay kutusunun öntanımlı durumunu belirler."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
@ -186,10 +163,9 @@ msgstr "\"Uygulamaları Göster\" görünümünü açmak için klavye kısayolu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Etkinlikler Genel Görünümünün \"Uygulamaları Göster\" görünümünü açmak için "
"klavye kısayolu."
"Keybinding to open the \"Show Applications\" view of the Activities "
"Overview."
msgstr "Etkinlikler Genel Görünümünün \"Uygulamaları Göster\" görünümünü açmak için klavye kısayolu."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
@ -235,14 +211,7 @@ msgid ""
"receiver). Please keep in mind that this only controls what GeoClue will "
"allow applications to see and they can find user's location on their own "
"using network resources (albeit with street-level accuracy at best)."
msgstr ""
"Uygulamaların görmesine izin verilen en yüksek konum hassasiyetini "
"yapılandırır. Geçerli seçenekler: 'kapalı' (konum izlemeyi devre dışı "
"bırak), 'ülke', 'şehir', 'semt', 'sokak' ve 'kesin' (genelde GPS alıcısı "
"gerektirir). Lütfen unutmayın: Bu, sadece GeoClue'nun uygulamaların neleri "
"görmesine izin vereceğini denetler. Uygulamalar, kullanıcının konumunu (en "
"fazla sokak düzeyindeki bir hassasiyetle de olsa) ağ kaynaklarını kullanarak "
"kendi imkanlarıyla bulabilirler."
msgstr "Uygulamaların görmesine izin verilen en yüksek konum hassasiyetini yapılandırır. Geçerli seçenekler: 'kapalı' (konum izlemeyi devre dışı bırak), 'ülke', 'şehir', 'semt', 'sokak' ve 'kesin' (genelde GPS alıcısı gerektirir). Lütfen unutmayın: Bu, sadece GeoClue'nun uygulamaların neleri görmesine izin vereceğini denetler. Uygulamalar, kullanıcının konumunu (en fazla sokak düzeyindeki bir hassasiyetle de olsa) ağ kaynaklarını kullanarak kendi imkanlarıyla bulabilirler."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "The application icon mode."
@ -251,13 +220,9 @@ msgstr "Uygulama simge kipi."
#: ../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-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Pencerelerin değiştiricideki gösterim şeklini yapılandırır. Uygun "
"olasılıklar; 'thumbnail-only' (pencerenin küçük bir resmini gösterir), 'app-"
"icon-only' (sadece uygulama simgesini gösterir) ya da 'both' (her ikisi) "
"değerleridir."
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' "
"(shows only the application icon) or 'both'."
msgstr "Pencerelerin değiştiricideki gösterim şeklini yapılandırır. Uygun olasılıklar; 'thumbnail-only' (pencerenin küçük bir resmini gösterir), 'app-icon-only' (sadece uygulama simgesini gösterir) ya da 'both' (her ikisi) değerleridir."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Attach modal dialog to the parent window"
@ -266,52 +231,32 @@ msgstr "Yardımcı iletişim penceresini üst pencereye iliştir"
#: ../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 ""
"Bu anahtar, GNOME Shell çalışırken org.gnome.mutter içindeki anahtarı "
"geçersiz kılar."
msgstr "Bu anahtar, GNOME Shell çalışırken org.gnome.mutter içindeki anahtarı geçersiz kılar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Arrangement of buttons on the titlebar"
msgstr "Düğmelerin başlık çubuğundaki düzeni"
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Pencereler ekran kenarlarında bırakıldığında kenar döşemeyi etkinleştir."
#: ../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 ""
"Bu anahtar, GNOME Shell çalışırken org.gnome.desktop.wm.preferences içindeki "
"anahtarı geçersiz kılar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Pencereler ekran kenarlarında bırakıldığında kenar döşemeyi etkinleştir."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Workspaces are managed dynamically"
msgstr "Çalışma alanları dinamik olarak yönetilir"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Çalışma alanları sadece birincil ekranda"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Fare kipinde odak değişikliklerini işaretçi hareketi durana kadar beklet"
msgstr "Fare kipinde odak değişikliklerini işaretçi hareketi durana kadar beklet"
#: ../js/extensionPrefs/main.js:127
#: ../js/extensionPrefs/main.js:125
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "%s için tercihler iletişim penceresi yüklenirken hata oluştu:"
#: ../js/extensionPrefs/main.js:167
msgid "Extension"
msgstr "Eklenti"
#: ../js/extensionPrefs/main.js:191
msgid "Select an extension to configure using the combobox above."
msgstr "Ayarlamak için yukarıdaki açılan kutudan bir eklenti seçin."
#: ../js/extensionPrefs/main.js:157
msgid "GNOME Shell Extensions"
msgstr "GNOME Kabuğu Uzantıları"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
@ -334,25 +279,25 @@ msgctxt "button"
msgid "Sign In"
msgstr "Giriş"
#: ../js/gdm/loginDialog.js:271
#: ../js/gdm/loginDialog.js:269
msgid "Choose Session"
msgstr "Oturum Seçin"
#: ../js/gdm/loginDialog.js:431
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "Listede yok mu?"
#: ../js/gdm/loginDialog.js:616
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(örneğin, kullanıcı veya %s)"
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280
msgid "Username: "
msgstr "Kullanıcı Adı: "
#: ../js/gdm/loginDialog.js:924
#: ../js/gdm/loginDialog.js:922
msgid "Login Window"
msgstr "Oturum Açma Penceresi"
@ -402,7 +347,6 @@ msgid "Add to Favorites"
msgstr "Sık Kullanılanlara Ekle"
#: ../js/ui/appDisplay.js:1608
#| msgid "Show Text"
msgid "Show Details"
msgstr "Ayrıntıları Göster"
@ -541,11 +485,11 @@ msgctxt "list saturday"
msgid "S"
msgstr "Ct"
#: ../js/ui/calendar.js:453
#: ../js/ui/calendar.js:454
msgid "Previous month"
msgstr "Önceki ay"
#: ../js/ui/calendar.js:463
#: ../js/ui/calendar.js:464
msgid "Next month"
msgstr "Gelecek ay"
@ -554,13 +498,15 @@ msgstr "Gelecek ay"
msgid "Nothing Scheduled"
msgstr "Planınız Boş"
#. Translators: Shown on calendar heading when selected day occurs on current year */
#. Translators: Shown on calendar heading when selected day occurs on current
#. year */
#: ../js/ui/calendar.js:793
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */
#. Translators: Shown on calendar heading when selected day occurs on
#. different year */
#: ../js/ui/calendar.js:796
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
@ -649,9 +595,7 @@ msgstr "Kablosuz ağ için kimlik doğrulama gerekiyor"
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
msgstr ""
"“%s” kablosuz ağına erişmek için parolalar veya şifreleme anahtarları "
"gerekiyor."
msgstr "“%s” kablosuz ağına erişmek için parolalar veya şifreleme anahtarları gerekiyor."
#: ../js/ui/components/networkAgent.js:316
msgid "Wired 802.1X authentication"
@ -731,77 +675,78 @@ msgid "Mute"
msgstr "Sesi Kapat"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:957
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:965
#: ../js/ui/components/telepathyClient.js:964
msgid "Yesterday, %H%M"
msgstr "Dün, %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:972
#: ../js/ui/components/telepathyClient.js:971
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:979
#: ../js/ui/components/telepathyClient.js:978
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" */
#: ../js/ui/components/telepathyClient.js:985
#: ../js/ui/components/telepathyClient.js:984
msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:994
#: ../js/ui/components/telepathyClient.js:990
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:1001
#: ../js/ui/components/telepathyClient.js:997
msgid "Yesterday, %l%M %p"
msgstr "Dün, %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:1008
#: ../js/ui/components/telepathyClient.js:1004
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:1015
#: ../js/ui/components/telepathyClient.js:1011
msgid "%B %d, %l%M %p"
msgstr "%d %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:1021
#: ../js/ui/components/telepathyClient.js:1017
msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new
#. Translators: this is the other person changing their old IM name to their
#. new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:1054
#: ../js/ui/components/telepathyClient.js:1049
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s, şimdi %s olarak biliniyor"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1158
#: ../js/ui/components/telepathyClient.js:1153
#, javascript-format
msgid "Invitation to %s"
msgstr "%s'e Davet"
@ -809,38 +754,38 @@ msgstr "%s'e Davet"
#. 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:1166
#: ../js/ui/components/telepathyClient.js:1161
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s, sizi %s'e katılmanız için davet ediyor"
#: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1295
#: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1290
msgid "Decline"
msgstr "Reddet"
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1295
msgid "Accept"
msgstr "Kabul Et"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1193
#: ../js/ui/components/telepathyClient.js:1188
#, javascript-format
msgid "Video call from %s"
msgstr "%s'den görüntülü arama"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1191
#, javascript-format
msgid "Call from %s"
msgstr "%s'den çağrı"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1210
#: ../js/ui/components/telepathyClient.js:1205
msgid "Answer"
msgstr "Cevapla"
@ -849,133 +794,129 @@ msgstr "Cevapla"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1231
#: ../js/ui/components/telepathyClient.js:1226
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s, size %s dosyasını gönderiyor"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1260
#: ../js/ui/components/telepathyClient.js:1255
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s, ne zaman çevrimiçi olduğunuzu görmek için izin istiyor"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1341
msgid "Network error"
msgstr "Ağ hatası"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1343
msgid "Authentication failed"
msgstr "Kimlik doğrulama başarısız"
#: ../js/ui/components/telepathyClient.js:1350
#: ../js/ui/components/telepathyClient.js:1345
msgid "Encryption error"
msgstr "Şifreleme hatası"
#: ../js/ui/components/telepathyClient.js:1352
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate not provided"
msgstr "Sertifika sağlanmamış"
#: ../js/ui/components/telepathyClient.js:1354
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate untrusted"
msgstr "Sertifika güvenilmez"
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate expired"
msgstr "Sertifikanın süresi dolmuş"
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate not activated"
msgstr "Sertifika etkinleştirilmemiş"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate hostname mismatch"
msgstr "Sertifikanın makine adı uyuşmuyor"
#: ../js/ui/components/telepathyClient.js:1362
#: ../js/ui/components/telepathyClient.js:1357
msgid "Certificate fingerprint mismatch"
msgstr "Sertifikanın parmak izi uyuşmuyor"
#: ../js/ui/components/telepathyClient.js:1364
#: ../js/ui/components/telepathyClient.js:1359
msgid "Certificate self-signed"
msgstr "Sertifika kendinden-imzalı"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1361
msgid "Status is set to offline"
msgstr "Durum çevrimdıına ayarlı"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1363
msgid "Encryption is not available"
msgstr "Şifreleme kullanılabilir değil"
#: ../js/ui/components/telepathyClient.js:1370
#: ../js/ui/components/telepathyClient.js:1365
msgid "Certificate is invalid"
msgstr "Sertifika geçersiz"
#: ../js/ui/components/telepathyClient.js:1372
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been refused"
msgstr "Bağlantı reddedildi"
#: ../js/ui/components/telepathyClient.js:1374
#: ../js/ui/components/telepathyClient.js:1369
msgid "Connection can't be established"
msgstr "Bağlantı kurulamıyor"
#: ../js/ui/components/telepathyClient.js:1376
#: ../js/ui/components/telepathyClient.js:1371
msgid "Connection has been lost"
msgstr "Bağlantı koptu"
#: ../js/ui/components/telepathyClient.js:1378
#: ../js/ui/components/telepathyClient.js:1373
msgid "This account is already connected to the server"
msgstr "Bu hesap zaten sunucuya bağlı"
#: ../js/ui/components/telepathyClient.js:1380
#: ../js/ui/components/telepathyClient.js:1375
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Bağlantı, aynı kaynağı kullanan yeni bir bağlantı ile değiştirildi"
#: ../js/ui/components/telepathyClient.js:1382
#: ../js/ui/components/telepathyClient.js:1377
msgid "The account already exists on the server"
msgstr "Sunucuda böyle bir hesap zaten var"
#: ../js/ui/components/telepathyClient.js:1384
#: ../js/ui/components/telepathyClient.js:1379
msgid "Server is currently too busy to handle the connection"
msgstr "Sunucu, şu anda bağlantıyı işleyemeyecek kadar meşgul"
#: ../js/ui/components/telepathyClient.js:1386
#: ../js/ui/components/telepathyClient.js:1381
msgid "Certificate has been revoked"
msgstr "Sertifika hükümsüz kılınmış"
#: ../js/ui/components/telepathyClient.js:1388
#: ../js/ui/components/telepathyClient.js:1383
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifika güvensiz bir şifreleme algoritması kullanıyor ya da kriptografik "
"olarak zayıf"
msgstr "Sertifika güvensiz bir şifreleme algoritması kullanıyor ya da kriptografik olarak zayıf"
#: ../js/ui/components/telepathyClient.js:1390
#: ../js/ui/components/telepathyClient.js:1385
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
msgstr ""
"Sunucu sertifikasının uzunluğu ya da sunucu sertifikası zincirinin "
"derinliği, şifreleme kütüphanesi tarafından koyulan sınırlarııyor"
"The length of the server certificate, or the depth of the server certificate"
" chain, exceed the limits imposed by the cryptography library"
msgstr "Sunucu sertifikasının uzunluğu ya da sunucu sertifikası zincirinin derinliği, şifreleme kütüphanesi tarafından koyulan sınırlarııyor"
#: ../js/ui/components/telepathyClient.js:1392
#: ../js/ui/components/telepathyClient.js:1387
msgid "Internal error"
msgstr "İç hata"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1402
#: ../js/ui/components/telepathyClient.js:1397
#, javascript-format
msgid "Unable to connect to %s"
msgstr "%s bağlantısı sağlanamadı"
#: ../js/ui/components/telepathyClient.js:1407
#: ../js/ui/components/telepathyClient.js:1402
msgid "View account"
msgstr "Hesabı göster"
#: ../js/ui/components/telepathyClient.js:1444
#: ../js/ui/components/telepathyClient.js:1439
msgid "Unknown reason"
msgstr "Bilinmeyen sebep"
@ -1004,7 +945,8 @@ msgid "Date & Time Settings"
msgstr "Tarih ve Saat Ayarları"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29
#. AM").
#. */
#: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y"
@ -1087,12 +1029,11 @@ msgstr "Yeniden Başlat ve Güncelleştirmeleri Kur"
#: ../js/ui/endSessionDialog.js:123
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid ""
"The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"Sistem %d saniye içinde kendiliğinden yeniden başlayacak ve "
"güncelleştirmeleri kuracak."
msgstr[0] "Sistem %d saniye içinde kendiliğinden yeniden başlayacak ve güncelleştirmeleri kuracak."
#: ../js/ui/endSessionDialog.js:129
msgctxt "button"
@ -1111,8 +1052,7 @@ msgstr "Güncelleştirmeler kurulduktan sonra kapat"
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Pil gücünde çalışıyor: Lütfen güncelleştirmeleri kurmadan önce fişi takın."
msgstr "Pil gücünde çalışıyor: Lütfen güncelleştirmeleri kurmadan önce fişi takın."
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
@ -1143,7 +1083,7 @@ msgstr "Kur"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "extensions.gnome.org adresinden “%s” indirilip kurulsun mu?"
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "Klavye"
@ -1276,7 +1216,7 @@ msgstr "Etkinlikler"
msgid "Top Bar"
msgstr "Tepe Çubuğu"
#: ../js/ui/popupMenu.js:271
#: ../js/ui/popupMenu.js:279
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1284,7 +1224,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command"
msgstr "Komut Girin"
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
msgid "Close"
msgstr "Kapat"
@ -1421,7 +1361,7 @@ msgstr "Bağlı Değil"
msgid "Brightness"
msgstr "Parlaklık"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:407
msgid "Show Keyboard Layout"
msgstr "Klavye Düzenini Göster"
@ -1454,15 +1394,14 @@ msgstr "Kapalı"
msgid "Connected"
msgstr "Bağlı"
#. Translators: this is for network devices that are physically present but are not
#. Translators: this is for network devices that are physically present but
#. are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:426
#| msgid "unmanaged"
msgid "Unmanaged"
msgstr "Yönetilmeyen"
#: ../js/ui/status/network.js:428
#| msgid "disconnecting..."
msgid "Disconnecting"
msgstr "Bağlantı Kesiliyor"
@ -1470,23 +1409,23 @@ msgstr "Bağlantı Kesiliyor"
msgid "Connecting"
msgstr "Bağlantı Kuruluyor"
#. Translators: this is for network connections that require some kind of key or password */
#. Translators: this is for network connections that require some kind of key
#. or password */
#: ../js/ui/status/network.js:437
#| msgid "authentication required"
msgid "Authentication required"
msgstr "Kimlik doğrulama gerekir"
#. Translators: this is for devices that require some kind of firmware or kernel
#. Translators: this is for devices that require some kind of firmware or
#. kernel
#. module, which is missing */
#: ../js/ui/status/network.js:445
#| msgid "firmware missing"
msgid "Firmware missing"
msgstr "Ürün Bilgisi eksik"
#. Translators: this is for a network device that cannot be activated (for example it
#. Translators: this is for a network device that cannot be activated (for
#. example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:449
#| msgid "unavailable"
msgid "Unavailable"
msgstr "Kullanılamaz"
@ -1570,7 +1509,8 @@ msgstr "Hotspot Etkin"
msgid "connecting..."
msgstr "bağlanıyor..."
#. Translators: this is for network connections that require some kind of key or password */
#. Translators: this is for network connections that require some kind of key
#. or password */
#: ../js/ui/status/network.js:1365
msgid "authentication required"
msgstr "kimlik doğrulaması gerekli"
@ -1711,43 +1651,43 @@ msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "Ayarlardaki değişiklikler %d saniye içinde eski haline döndürülecek"
#: ../js/ui/windowMenu.js:33
#: ../js/ui/windowMenu.js:34
msgid "Minimize"
msgstr ""
msgstr "Simge durumuna küçült"
#: ../js/ui/windowMenu.js:40
#: ../js/ui/windowMenu.js:41
msgid "Unmaximize"
msgstr ""
msgstr "Önceki Boyut"
#: ../js/ui/windowMenu.js:44
#: ../js/ui/windowMenu.js:45
msgid "Maximize"
msgstr ""
msgstr "En üst düzeye çıkar"
#: ../js/ui/windowMenu.js:51
#: ../js/ui/windowMenu.js:52
msgid "Move"
msgstr "Taşı"
#: ../js/ui/windowMenu.js:57
#: ../js/ui/windowMenu.js:58
msgid "Resize"
msgstr "Yeniden Boyutlandır"
#: ../js/ui/windowMenu.js:64
#: ../js/ui/windowMenu.js:65
msgid "Move Titlebar Onscreen"
msgstr "Başlık Çubuğunu Ekranda Taşı"
#: ../js/ui/windowMenu.js:69
#: ../js/ui/windowMenu.js:70
msgid "Always on Top"
msgstr "Her Zaman Üstte"
#: ../js/ui/windowMenu.js:86
#: ../js/ui/windowMenu.js:89
msgid "Always on Visible Workspace"
msgstr "Her Zaman Görünür Çalışma Alanında"
#: ../js/ui/windowMenu.js:103
#: ../js/ui/windowMenu.js:106
msgid "Move to Workspace Up"
msgstr "Üstteki Çalışma Alanına Taşı"
#: ../js/ui/windowMenu.js:108
#: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down"
msgstr "Alttaki Çalışma Alanına Taşı"
@ -1807,72 +1747,3 @@ msgstr "Parola boş bırakılamaz"
#: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user"
msgstr "Kimlik doğrulama penceresi kullanıcı tarafından kapatıldı"
#~ msgid "calendar:MY"
#~ msgstr "takvim:AY"
#~ msgid "List of categories that should be displayed as folders"
#~ msgstr "Klasör olarak görüntülenecek kategorilerin listesi"
#~ msgid ""
#~ "Each category name in this list will be represented as folder in the "
#~ "application view, rather than being displayed inline in the main view."
#~ msgstr ""
#~ "Bu listedeki her bir kategori adı, genel görünümde satıriçi olarak "
#~ "gösterilmek yerine, uygulama görünümünde klasör olarak temsil edilecektir."
#~ msgid "<b>%A</b>, <b>%H:%M</b>"
#~ msgstr "<b>%A</b>,<b>%H:%M</b>"
#~ msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
#~ msgstr "<b>%d</b> <b>%B</b>, <b>%H:%M</b>"
#~ msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
#~ msgstr "<b>%d</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#~ msgid "Authorization request from %s"
#~ msgstr "%s 'den yetkilendirme isteği"
#~ msgid "Device %s wants to pair with this computer"
#~ msgstr "%s aygıtı bu bilgisayarla eşleşmek istiyor"
#~ msgid "Allow"
#~ msgstr "İzin ver"
#~ msgid "Deny"
#~ msgstr "Reddet"
#~ msgid "Device %s wants access to the service '%s'"
#~ msgstr "%s aygıtı '%s' hizmetine erişmek istiyor"
#~ msgid "Always grant access"
#~ msgstr "Her zaman erişim izni ver"
#~ msgid "Grant this time only"
#~ msgstr "Sadece bu seferlik izin ver"
#~ msgid "Reject"
#~ msgstr "Reddet"
#~ msgid "Pairing confirmation for %s"
#~ msgstr "%s için eşleşme onayı"
#~ msgid ""
#~ "Please confirm whether the Passkey '%06d' matches the one on the device."
#~ msgstr ""
#~ "Lütfen '%06d' Geçiş Anahtarının, aygıttakiyle eşleştiğini doğrulayın."
#~ msgid "Matches"
#~ msgstr "Eşleşiyor"
#~ msgid "Does not match"
#~ msgstr "Eşleşmiyor"
#~ msgid "Pairing request for %s"
#~ msgstr "%s için eşleşme isteği"
#~ msgid "Please enter the PIN mentioned on the device."
#~ msgstr "Lütfen cihazdaki PIN numarasını girin."
#~ msgid "OK"
#~ msgstr "TAMAM"

View File

@ -34,6 +34,8 @@ 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"
@ -167,6 +169,26 @@ 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)
{
@ -434,6 +456,8 @@ 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,6 +1355,37 @@ 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,6 +35,7 @@ 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);