Merge branch 'master' into datetime
This commit is contained in:
commit
2f52b87451
@ -88,8 +88,6 @@ function init() {
|
|||||||
|
|
||||||
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
||||||
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
|
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
|
||||||
_blockMethod('Gdk.Device.get_state', 'global.get_pointer',
|
|
||||||
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
|
||||||
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
|
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
|
||||||
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
||||||
|
|
||||||
|
@ -167,6 +167,7 @@ Overview.prototype = {
|
|||||||
this._windowSwitchTimeoutId = 0;
|
this._windowSwitchTimeoutId = 0;
|
||||||
this._windowSwitchTimestamp = 0;
|
this._windowSwitchTimestamp = 0;
|
||||||
this._lastActiveWorkspaceIndex = -1;
|
this._lastActiveWorkspaceIndex = -1;
|
||||||
|
this._lastHoveredWindow = null;
|
||||||
this._needsFakePointerEvent = false;
|
this._needsFakePointerEvent = false;
|
||||||
|
|
||||||
this.workspaces = null;
|
this.workspaces = null;
|
||||||
@ -186,7 +187,7 @@ Overview.prototype = {
|
|||||||
global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
|
global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
|
||||||
this.hideTemporarily();
|
this.hideTemporarily();
|
||||||
}
|
}
|
||||||
|
this._lastHoveredWindow = null;
|
||||||
DND.removeMonitor(this._dragMonitor);
|
DND.removeMonitor(this._dragMonitor);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -200,15 +201,24 @@ Overview.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onDragMotion: function(dragEvent) {
|
_onDragMotion: function(dragEvent) {
|
||||||
|
let targetIsWindow = dragEvent.targetActor &&
|
||||||
|
dragEvent.targetActor._delegate &&
|
||||||
|
dragEvent.targetActor._delegate.metaWindow;
|
||||||
|
|
||||||
|
if (targetIsWindow &&
|
||||||
|
dragEvent.targetActor._delegate.metaWindow == this._lastHoveredWindow)
|
||||||
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|
||||||
|
this._lastHoveredWindow = null;
|
||||||
|
|
||||||
if (this._windowSwitchTimeoutId != 0) {
|
if (this._windowSwitchTimeoutId != 0) {
|
||||||
Mainloop.source_remove(this._windowSwitchTimeoutId);
|
Mainloop.source_remove(this._windowSwitchTimeoutId);
|
||||||
this._windowSwitchTimeoutId = 0;
|
this._windowSwitchTimeoutId = 0;
|
||||||
this._needsFakePointerEvent = false;
|
this._needsFakePointerEvent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dragEvent.targetActor &&
|
if (targetIsWindow) {
|
||||||
dragEvent.targetActor._delegate &&
|
this._lastHoveredWindow = dragEvent.targetActor._delegate.metaWindow;
|
||||||
dragEvent.targetActor._delegate.metaWindow) {
|
|
||||||
this._windowSwitchTimestamp = global.get_current_time();
|
this._windowSwitchTimestamp = global.get_current_time();
|
||||||
this._windowSwitchTimeoutId = Mainloop.timeout_add(DND_WINDOW_SWITCH_TIMEOUT,
|
this._windowSwitchTimeoutId = Mainloop.timeout_add(DND_WINDOW_SWITCH_TIMEOUT,
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
@ -216,6 +226,7 @@ Overview.prototype = {
|
|||||||
Main.activateWindow(dragEvent.targetActor._delegate.metaWindow,
|
Main.activateWindow(dragEvent.targetActor._delegate.metaWindow,
|
||||||
this._windowSwitchTimestamp);
|
this._windowSwitchTimestamp);
|
||||||
this.hideTemporarily();
|
this.hideTemporarily();
|
||||||
|
this._lastHoveredWindow = null;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,8 +224,8 @@ SearchProvider.prototype = {
|
|||||||
};
|
};
|
||||||
Signals.addSignalMethods(SearchProvider.prototype);
|
Signals.addSignalMethods(SearchProvider.prototype);
|
||||||
|
|
||||||
function OpenSearchSystem(title) {
|
function OpenSearchSystem() {
|
||||||
this._init(title);
|
this._init();
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenSearchSystem.prototype = {
|
OpenSearchSystem.prototype = {
|
||||||
|
291
po/ar.po
291
po/ar.po
@ -6,8 +6,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: HEAD\n"
|
"Project-Id-Version: HEAD\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-01-12 11:29+0200\n"
|
"POT-Creation-Date: 2011-01-19 22:47+0200\n"
|
||||||
"PO-Revision-Date: 2011-01-12 11:29+0300\n"
|
"PO-Revision-Date: 2011-01-19 22:47+0300\n"
|
||||||
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -133,6 +133,10 @@ msgstr ""
|
|||||||
msgid "Whether to collect stats about applications usage"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||||
|
msgid "disabled OpenSearch providers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||||
msgid "Clip the crosshairs at the center"
|
msgid "Clip the crosshairs at the center"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -258,6 +262,21 @@ msgstr ""
|
|||||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
|
#. something nicer
|
||||||
|
#: ../js/misc/util.js:108
|
||||||
|
msgid "Could not parse command:"
|
||||||
|
msgstr "تعذّر تحليل الأمر:"
|
||||||
|
|
||||||
|
#: ../js/misc/util.js:130
|
||||||
|
msgid "No such application"
|
||||||
|
msgstr "لا تطبيق بهذا الاسم"
|
||||||
|
|
||||||
|
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
|
||||||
|
#, c-format
|
||||||
|
msgid "Execution of '%s' failed:"
|
||||||
|
msgstr "فشل تنفيذ '%s':"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:155
|
#: ../js/ui/appDisplay.js:155
|
||||||
msgid "All"
|
msgid "All"
|
||||||
@ -297,118 +316,191 @@ msgstr "أزيل %s من مفضّلتك."
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "أزِل"
|
msgstr "أزِل"
|
||||||
|
|
||||||
#: ../js/ui/docDisplay.js:494
|
#: ../js/ui/docDisplay.js:18
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "العناصر الحديثة"
|
msgstr "العناصر الحديثة"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:552
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
|
#, c-format
|
||||||
|
msgid "Log Out %s"
|
||||||
|
msgstr "اخرج%.0s"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "اخرج"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:65
|
||||||
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
|
msgstr "انقر على \"اخرج\" لغلق هذه التطبيقات والخروج من النظام."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
|
#, c-format
|
||||||
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
|
msgstr "سيُخرج %s تلقائيا بعد %d ثوان."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
|
#, c-format
|
||||||
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
|
msgstr "ستُخرج تلقائيا بعد %d ثوان."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:68
|
||||||
|
msgid "Logging out of the system."
|
||||||
|
msgstr "يخرج من النظام."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
|
msgid "Shut Down"
|
||||||
|
msgstr "أطفئ"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
|
msgstr "انقر على \"أطفئ\" لغلق هذه التطبيقات وإطفاء النظام."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:76
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
|
msgstr "سيُطفأ النظام تلقائيا خلال %d ثوان."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
|
msgid "Shutting down the system."
|
||||||
|
msgstr "يُغلق النظام."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
|
msgid "Restart"
|
||||||
|
msgstr "أعِد التشغيل"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
|
msgstr "انقر على \"أعِد التشغيل\" لغلق هذه التطبيقات إعادة تشغيل النظام."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:86
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will restart automatically in %d seconds."
|
||||||
|
msgstr "سيُعاد تشغيل النظام تلقائيا خلال %d ثوان."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:87
|
||||||
|
msgid "Restarting the system."
|
||||||
|
msgstr "يُعيد تشغيل النظام."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:395
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "أكّد"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "ألغِ"
|
||||||
|
|
||||||
|
#: ../js/ui/lookingGlass.js:556
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "لم تثبّت أية امتدادات"
|
msgstr "لم تثبّت أية امتدادات"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:589
|
#: ../js/ui/lookingGlass.js:593
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "مفعّل"
|
msgstr "مفعّل"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "معطّل"
|
msgstr "معطّل"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:593
|
#: ../js/ui/lookingGlass.js:597
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "خطأ"
|
msgstr "خطأ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:595
|
#: ../js/ui/lookingGlass.js:599
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "غير محدث"
|
msgstr "غير محدث"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:620
|
#: ../js/ui/lookingGlass.js:624
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "اعرض المصدر"
|
msgstr "اعرض المصدر"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:626
|
#: ../js/ui/lookingGlass.js:630
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "صفحة الوب"
|
msgstr "صفحة الوب"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:101
|
#: ../js/ui/messageTray.js:1765
|
||||||
|
msgid "System Information"
|
||||||
|
msgstr "معلومات النظام"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:75
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "تراجع"
|
msgstr "تراجع"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:166
|
#: ../js/ui/overview.js:140
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "النوافذ"
|
msgstr "النوافذ"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:169
|
#: ../js/ui/overview.js:143
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "التطبيقات"
|
msgstr "التطبيقات"
|
||||||
|
|
||||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:478
|
#: ../js/ui/panel.js:479
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "أغلق %s"
|
msgstr "أغلق %s"
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:563
|
#: ../js/ui/panel.js:564
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%A %e %B، %R:%S"
|
msgstr "%A %e %B، %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:564
|
#: ../js/ui/panel.js:565
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%A %e %B، %R"
|
msgstr "%A %e %B، %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:568
|
#: ../js/ui/panel.js:569
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%A %R:%S"
|
msgstr "%A %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:569
|
#: ../js/ui/panel.js:570
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%A %R"
|
msgstr "%A %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:576
|
#: ../js/ui/panel.js:577
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%A %e %B، %l:%M:%S %p"
|
msgstr "%A %e %B، %l:%M:%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:577
|
#: ../js/ui/panel.js:578
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%A %e %B، %l:%M %p"
|
msgstr "%A %e %B، %l:%M %p"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:581
|
#: ../js/ui/panel.js:582
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%A %l:%M:%S %p"
|
msgstr "%A %l:%M:%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:582
|
#: ../js/ui/panel.js:583
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%A %Ol:%OM %p"
|
msgstr "%A %Ol:%OM %p"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. Button on the left side of the panel.
|
||||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:727
|
#: ../js/ui/panel.js:728
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "الأنشطة"
|
msgstr "الأنشطة"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:111
|
#: ../js/ui/placeDisplay.js:106
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr "فشل فصْل '%s'"
|
msgstr "فشل فصْل '%s'"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:114
|
#: ../js/ui/placeDisplay.js:109
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr "أعد المحاولة"
|
msgstr "أعد المحاولة"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:159
|
#: ../js/ui/placeDisplay.js:150
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "اتّصل ب..."
|
msgstr "اتّصل ب..."
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:558
|
#: ../js/ui/placeDisplay.js:386
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
msgstr "الأماكن والأجهزة"
|
msgstr "الأماكن والأجهزة"
|
||||||
|
|
||||||
@ -421,84 +513,79 @@ msgstr "الأماكن والأجهزة"
|
|||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:238
|
#: ../js/ui/runDialog.js:209
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "من فضلك اكتب أمرا:"
|
msgstr "من فضلك اكتب أمرا:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:383
|
#: ../js/ui/statusMenu.js:102
|
||||||
#, c-format
|
|
||||||
msgid "Execution of '%s' failed:"
|
|
||||||
msgstr "فشل تنفيذ '%s':"
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:101
|
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "متاح"
|
msgstr "متاح"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:106
|
#: ../js/ui/statusMenu.js:107
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "مشغول"
|
msgstr "مشغول"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:114
|
#: ../js/ui/statusMenu.js:115
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "حسابي"
|
msgstr "حسابي"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:118
|
#: ../js/ui/statusMenu.js:119
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "إعدادات النظام"
|
msgstr "إعدادات النظام"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:125
|
#: ../js/ui/statusMenu.js:126
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "أوصد الشاشة"
|
msgstr "أوصد الشاشة"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:129
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "بدّل المستخدم"
|
msgstr "بدّل المستخدم"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:134
|
#: ../js/ui/statusMenu.js:135
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "اخرج..."
|
msgstr "اخرج..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:141
|
#: ../js/ui/statusMenu.js:142
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr "علّق..."
|
msgstr "علّق..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:145
|
#: ../js/ui/statusMenu.js:146
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "أطفئ..."
|
msgstr "أطفئ..."
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:82
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "تقريب"
|
msgstr "تقريب"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "قارئ الشاشة"
|
msgstr "قارئ الشاشة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:91
|
#: ../js/ui/status/accessibility.js:92
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "لوحة مفاتيح على الشاشة"
|
msgstr "لوحة مفاتيح على الشاشة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:94
|
#: ../js/ui/status/accessibility.js:95
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "تنبيهات بصرية"
|
msgstr "تنبيهات بصرية"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:97
|
#: ../js/ui/status/accessibility.js:98
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "مفاتيح لاصقة"
|
msgstr "مفاتيح لاصقة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:100
|
#: ../js/ui/status/accessibility.js:101
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "مفاتيح بطيئة"
|
msgstr "مفاتيح بطيئة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:103
|
#: ../js/ui/status/accessibility.js:104
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "مفاتيح لها صوت"
|
msgstr "مفاتيح لها صوت"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:106
|
#: ../js/ui/status/accessibility.js:107
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "مفاتيح الفأرة"
|
msgstr "مفاتيح الفأرة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:110
|
#: ../js/ui/status/accessibility.js:111
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "إعدادات الإتاحة"
|
msgstr "إعدادات الإتاحة"
|
||||||
|
|
||||||
@ -510,7 +597,7 @@ msgstr "تباين عال"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "نص كبير"
|
msgstr "نص كبير"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "بلوتوث"
|
msgstr "بلوتوث"
|
||||||
|
|
||||||
@ -526,110 +613,106 @@ msgstr "أرسِل ملفات للجهاز..."
|
|||||||
msgid "Setup a New Device..."
|
msgid "Setup a New Device..."
|
||||||
msgstr "اضبط جهازا جديدا..."
|
msgstr "اضبط جهازا جديدا..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:94
|
#: ../js/ui/status/bluetooth.js:95
|
||||||
msgid "Bluetooth Settings"
|
msgid "Bluetooth Settings"
|
||||||
msgstr "إعدادات بلوتوث"
|
msgstr "إعدادات بلوتوث"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:191
|
#: ../js/ui/status/bluetooth.js:192
|
||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "الاتصال"
|
msgstr "الاتصال"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:227
|
#: ../js/ui/status/bluetooth.js:228
|
||||||
msgid "Send Files..."
|
msgid "Send Files..."
|
||||||
msgstr "أرسل ملفات..."
|
msgstr "أرسل ملفات..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:232
|
#: ../js/ui/status/bluetooth.js:233
|
||||||
msgid "Browse Files..."
|
msgid "Browse Files..."
|
||||||
msgstr "تصفح الملفات..."
|
msgstr "تصفح الملفات..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:241
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
msgid "Error browsing device"
|
msgid "Error browsing device"
|
||||||
msgstr "عطل أثناء تصفّح الجهاز"
|
msgstr "عطل أثناء تصفّح الجهاز"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:242
|
#: ../js/ui/status/bluetooth.js:243
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The requested device cannot be browsed, error is '%s'"
|
msgid "The requested device cannot be browsed, error is '%s'"
|
||||||
msgstr "تعذّر تصفح الجهاز، رسالة العطل '%s'"
|
msgstr "تعذّر تصفح الجهاز، رسالة العطل '%s'"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:250
|
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
|
||||||
msgid "Keyboard Settings"
|
msgid "Keyboard Settings"
|
||||||
msgstr "إعدادات لوحة المفاتيح"
|
msgstr "إعدادات لوحة المفاتيح"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:255
|
#: ../js/ui/status/bluetooth.js:256
|
||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "إعدادات الفأرة"
|
msgstr "إعدادات الفأرة"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:62
|
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:63
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "إعدادات الصوت"
|
msgstr "إعدادات الصوت"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
|
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||||
#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
|
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||||
msgid "Bluetooth Agent"
|
msgid "Bluetooth Agent"
|
||||||
msgstr "عميل بلوتوث"
|
msgstr "عميل بلوتوث"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:371
|
#: ../js/ui/status/bluetooth.js:372
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Authorization request from %s"
|
msgid "Authorization request from %s"
|
||||||
msgstr "طلب تخويل من %s"
|
msgstr "طلب تخويل من %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:377
|
#: ../js/ui/status/bluetooth.js:378
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants access to the service '%s'"
|
msgid "Device %s wants access to the service '%s'"
|
||||||
msgstr "يريد الجهاز %s صلاحية الوصول للخدمة '%s'"
|
msgstr "يريد الجهاز %s صلاحية الوصول للخدمة '%s'"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:379
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
msgid "Always grant access"
|
msgid "Always grant access"
|
||||||
msgstr "امنح الصلاحية دائما"
|
msgstr "امنح الصلاحية دائما"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:380
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
msgid "Grant this time only"
|
msgid "Grant this time only"
|
||||||
msgstr "امنح هذه المرة فقط"
|
msgstr "امنح هذه المرة فقط"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:381
|
#: ../js/ui/status/bluetooth.js:382
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "أخرج"
|
msgstr "أخرج"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:411
|
#: ../js/ui/status/bluetooth.js:412
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing confirmation for %s"
|
msgid "Pairing confirmation for %s"
|
||||||
msgstr "تأكيد مزاوجة %s"
|
msgstr "تأكيد مزاوجة %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
|
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants to pair with this computer"
|
msgid "Device %s wants to pair with this computer"
|
||||||
msgstr "يريد الجهاز %s المزاوجة مع هذا الحاسوب"
|
msgstr "يريد الجهاز %s المزاوجة مع هذا الحاسوب"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:418
|
#: ../js/ui/status/bluetooth.js:419
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||||
msgstr "من فضلك أكد تطابق الرقم '%s' مع الموجود على الجهاز."
|
msgstr "من فضلك أكد تطابق الرقم '%s' مع الموجود على الجهاز."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:420
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
msgid "Matches"
|
msgid "Matches"
|
||||||
msgstr "مطابقات"
|
msgstr "مطابقات"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:421
|
#: ../js/ui/status/bluetooth.js:422
|
||||||
msgid "Does not match"
|
msgid "Does not match"
|
||||||
msgstr "لا تتطابق"
|
msgstr "لا تتطابق"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:444
|
#: ../js/ui/status/bluetooth.js:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing request for %s"
|
msgid "Pairing request for %s"
|
||||||
msgstr "طلب مزاوجة من %s"
|
msgstr "طلب مزاوجة من %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:452
|
#: ../js/ui/status/bluetooth.js:453
|
||||||
msgid "Please enter the PIN mentioned on the device."
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
msgstr "من فضلك أدخل الرقم المذكور على الجهاز."
|
msgstr "من فضلك أدخل الرقم المذكور على الجهاز."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:468
|
#: ../js/ui/status/bluetooth.js:469
|
||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "حسنا"
|
msgstr "حسنا"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:469
|
|
||||||
msgid "Cancel"
|
|
||||||
msgstr "ألغِ"
|
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:85
|
#: ../js/ui/status/power.js:85
|
||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "إعدادات الطاقة"
|
msgstr "إعدادات الطاقة"
|
||||||
@ -654,7 +737,7 @@ msgstr "بقي %d %s و %d %s"
|
|||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
msgstr[0] "أقل من ساعة"
|
msgstr[0] "ساعة"
|
||||||
msgstr[1] "ساعة"
|
msgstr[1] "ساعة"
|
||||||
msgstr[2] "ساعتين"
|
msgstr[2] "ساعتين"
|
||||||
msgstr[3] "ساعات"
|
msgstr[3] "ساعات"
|
||||||
@ -664,7 +747,7 @@ msgstr[5] "ساعة"
|
|||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "minute"
|
msgid "minute"
|
||||||
msgid_plural "minutes"
|
msgid_plural "minutes"
|
||||||
msgstr[0] "أقل من دقيقة"
|
msgstr[0] "دقيقة"
|
||||||
msgstr[1] "دقيقة"
|
msgstr[1] "دقيقة"
|
||||||
msgstr[2] "دقيقتين"
|
msgstr[2] "دقيقتين"
|
||||||
msgstr[3] "دقائق"
|
msgstr[3] "دقائق"
|
||||||
@ -682,59 +765,59 @@ msgstr[3] "بقي %d دقائق"
|
|||||||
msgstr[4] "بقي %d دقيقة"
|
msgstr[4] "بقي %d دقيقة"
|
||||||
msgstr[5] "بقي %d دقيقة"
|
msgstr[5] "بقي %d دقيقة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:237
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "مقبس طاقة"
|
msgstr "مقبس طاقة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:239
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "بطارية حاسوب محمول"
|
msgstr "بطارية حاسوب محمول"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "مزود طاقة لا منقطعة"
|
msgstr "مزود طاقة لا منقطعة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "شاشة"
|
msgstr "شاشة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "فأرة"
|
msgstr "فأرة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "لوحة المفاتيح"
|
msgstr "لوحة المفاتيح"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "مساعد رقمي"
|
msgstr "مساعد رقمي"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "هاتف محمول"
|
msgstr "هاتف محمول"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "مشغل وسائط"
|
msgstr "مشغل وسائط"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "لوحة"
|
msgstr "لوحة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "حاسوب"
|
msgstr "حاسوب"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "مجهول"
|
msgstr "مجهول"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:41
|
#: ../js/ui/status/volume.js:42
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "جزء"
|
msgstr "جزء"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:54
|
#: ../js/ui/status/volume.js:55
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "ميكروفون"
|
msgstr "ميكروفون"
|
||||||
|
|
||||||
@ -819,11 +902,11 @@ msgstr[5] "%u مدخل"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "أصوات النظام"
|
msgstr "أصوات النظام"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1233
|
#: ../src/shell-global.c:1366
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "منذ أقل من دقيقة"
|
msgstr "منذ أقل من دقيقة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1237
|
#: ../src/shell-global.c:1370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
@ -834,7 +917,7 @@ msgstr[3] "منذ %d دقائق"
|
|||||||
msgstr[4] "منذ %d دقيقة"
|
msgstr[4] "منذ %d دقيقة"
|
||||||
msgstr[5] "منذ %d دقيقة"
|
msgstr[5] "منذ %d دقيقة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1242
|
#: ../src/shell-global.c:1375
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
@ -845,7 +928,7 @@ msgstr[3] "منذ %d ساعات"
|
|||||||
msgstr[4] "منذ %d ساعة"
|
msgstr[4] "منذ %d ساعة"
|
||||||
msgstr[5] "منذ %d ساعة"
|
msgstr[5] "منذ %d ساعة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1247
|
#: ../src/shell-global.c:1380
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
@ -856,7 +939,7 @@ msgstr[3] "منذ %d أيام"
|
|||||||
msgstr[4] "منذ %d يوما"
|
msgstr[4] "منذ %d يوما"
|
||||||
msgstr[5] "منذ %d يوم"
|
msgstr[5] "منذ %d يوم"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1252
|
#: ../src/shell-global.c:1385
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -939,12 +1022,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "System Preferences..."
|
#~ msgid "System Preferences..."
|
||||||
#~ msgstr "تفضيلات النظام..."
|
#~ msgstr "تفضيلات النظام..."
|
||||||
|
|
||||||
#~ msgid "Restart..."
|
|
||||||
#~ msgstr "أعد التشغيل..."
|
|
||||||
|
|
||||||
#~ msgid "Account Information..."
|
|
||||||
#~ msgstr "معلومات الحساب..."
|
|
||||||
|
|
||||||
#~ msgid "%H:%M"
|
#~ msgid "%H:%M"
|
||||||
#~ msgstr "%OH:%OM"
|
#~ msgstr "%OH:%OM"
|
||||||
|
|
||||||
|
128
po/es.po
128
po/es.po
@ -9,8 +9,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell.master\n"
|
"Project-Id-Version: gnome-shell.master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&component=general\n"
|
"shell&component=general\n"
|
||||||
"POT-Creation-Date: 2011-01-15 00:23+0000\n"
|
"POT-Creation-Date: 2011-01-17 21:45+0000\n"
|
||||||
"PO-Revision-Date: 2011-01-16 13:26+0100\n"
|
"PO-Revision-Date: 2011-01-19 16:17+0100\n"
|
||||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -88,13 +88,13 @@ msgid ""
|
|||||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
|
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
|
||||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
|
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
|
||||||
"(«sink») de ensamblaje/sesensamblaje donde el vídeo que se está grabando se "
|
"de ensamblaje/sesensamblaje donde el vídeo que se está grabando se graba. "
|
||||||
"graba. Generalmente tendrá un origen de ensamblado/desensamblado; la salida "
|
"Generalmente tendrá un origen de ensamblado/desensamblado; la salida de ese "
|
||||||
"de ese punto se escibirá en el archivo de salida. No obstante la tubería "
|
"punto se escibirá en el archivo de salida. No obstante la tubería también "
|
||||||
"también puede tomar parte en su propia salida; esto se puede usar para "
|
"puede tomar parte en su propia salida; esto se puede usar para enviar la "
|
||||||
"enviar la salida a un servidor «icecast» a través de shout2send o similar. "
|
"salida a un servidor «icecast» a través de shout2send o similar. Cuando no "
|
||||||
"Cuando no está establecido o lo está a un valor vacío, se usará la tubería "
|
"está establecido o lo está a un valor vacío, se usará la tubería "
|
||||||
"predeterminada. Actualmente es «videorate ! theoraenc ! oggmux» y greba en "
|
"predeterminada. Actualmente es «videorate ! theoraenc ! oggmux» y greba en "
|
||||||
"Ogg Theora."
|
"Ogg Theora."
|
||||||
|
|
||||||
@ -161,6 +161,10 @@ msgid "Whether to collect stats about applications usage"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
|
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||||
|
msgid "disabled OpenSearch providers"
|
||||||
|
msgstr "proveedores OpenSearch desactivados"
|
||||||
|
|
||||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||||
msgid "Clip the crosshairs at the center"
|
msgid "Clip the crosshairs at the center"
|
||||||
msgstr "Fijar los cursores en el centro"
|
msgstr "Fijar los cursores en el centro"
|
||||||
@ -321,16 +325,14 @@ msgstr ""
|
|||||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
#. something nicer
|
#. something nicer
|
||||||
#: ../js/misc/util.js:108
|
#: ../js/misc/util.js:108
|
||||||
#| msgid "Please enter a command:"
|
|
||||||
msgid "Could not parse command:"
|
msgid "Could not parse command:"
|
||||||
msgstr "No se pudo analizar el comando:"
|
msgstr "No se pudo analizar el comando:"
|
||||||
|
|
||||||
#: ../js/misc/util.js:130
|
#: ../js/misc/util.js:130
|
||||||
#| msgid "Applications"
|
|
||||||
msgid "No such application"
|
msgid "No such application"
|
||||||
msgstr "No existe la aplicación"
|
msgstr "No existe la aplicación"
|
||||||
|
|
||||||
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
|
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Falló la ejecución de «%s»:"
|
msgstr "Falló la ejecución de «%s»:"
|
||||||
@ -380,12 +382,10 @@ msgstr "ELEMENTOS RECIENTES"
|
|||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:63
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
#, c-format
|
#, c-format
|
||||||
#| msgid "Log Out..."
|
|
||||||
msgid "Log Out %s"
|
msgid "Log Out %s"
|
||||||
msgstr "Cerrar la sesión %s"
|
msgstr "Cerrar la sesión %s"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
#| msgid "Log Out..."
|
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Cerrar la sesión"
|
msgstr "Cerrar la sesión"
|
||||||
|
|
||||||
@ -410,7 +410,6 @@ msgid "Logging out of the system."
|
|||||||
msgstr "Cerrando la sesión."
|
msgstr "Cerrando la sesión."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
#| msgid "Shut Down..."
|
|
||||||
msgid "Shut Down"
|
msgid "Shut Down"
|
||||||
msgstr "Apagar"
|
msgstr "Apagar"
|
||||||
|
|
||||||
@ -428,7 +427,6 @@ msgid "Shutting down the system."
|
|||||||
msgstr "Apagando el sistema."
|
msgstr "Apagando el sistema."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
#| msgid "Restart..."
|
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Reiniciar"
|
msgstr "Reiniciar"
|
||||||
|
|
||||||
@ -450,7 +448,7 @@ msgstr "Reiniciando el sistema."
|
|||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Confirmar"
|
msgstr "Confirmar"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
@ -485,7 +483,6 @@ msgid "Web Page"
|
|||||||
msgstr "Página web"
|
msgstr "Página web"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1748
|
#: ../js/ui/messageTray.js:1748
|
||||||
#| msgid "Account Information..."
|
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Información del sistema"
|
msgstr "Información del sistema"
|
||||||
|
|
||||||
@ -553,20 +550,20 @@ msgstr "%a %H:%M"
|
|||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Actividades"
|
msgstr "Actividades"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:112
|
#: ../js/ui/placeDisplay.js:106
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr "Falló al desmontar «%s»"
|
msgstr "Falló al desmontar «%s»"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:115
|
#: ../js/ui/placeDisplay.js:109
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr "Reintentar"
|
msgstr "Reintentar"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:160
|
#: ../js/ui/placeDisplay.js:150
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "Conectar a…"
|
msgstr "Conectar a…"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:559
|
#: ../js/ui/placeDisplay.js:386
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
msgstr "LUGARES Y DISPOSITIVOS"
|
msgstr "LUGARES Y DISPOSITIVOS"
|
||||||
|
|
||||||
@ -579,7 +576,7 @@ msgstr "LUGARES Y DISPOSITIVOS"
|
|||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:222
|
#: ../js/ui/runDialog.js:209
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Introduzca un comando:"
|
msgstr "Introduzca un comando:"
|
||||||
|
|
||||||
@ -663,7 +660,7 @@ msgstr "Contraste alto"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "<b>Texto:</b>"
|
msgstr "<b>Texto:</b>"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
@ -679,103 +676,103 @@ msgstr "Enviar archivos al dispositivo…"
|
|||||||
msgid "Setup a New Device..."
|
msgid "Setup a New Device..."
|
||||||
msgstr "Configurar un dispositivo nuevo…"
|
msgstr "Configurar un dispositivo nuevo…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:94
|
#: ../js/ui/status/bluetooth.js:95
|
||||||
msgid "Bluetooth Settings"
|
msgid "Bluetooth Settings"
|
||||||
msgstr "Configuración de Bluetooth"
|
msgstr "Configuración de Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:191
|
#: ../js/ui/status/bluetooth.js:192
|
||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "Conexión"
|
msgstr "Conexión"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:227
|
#: ../js/ui/status/bluetooth.js:228
|
||||||
msgid "Send Files..."
|
msgid "Send Files..."
|
||||||
msgstr "Enviar archivos…"
|
msgstr "Enviar archivos…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:232
|
#: ../js/ui/status/bluetooth.js:233
|
||||||
msgid "Browse Files..."
|
msgid "Browse Files..."
|
||||||
msgstr "Examinar archivos…"
|
msgstr "Examinar archivos…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:241
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
msgid "Error browsing device"
|
msgid "Error browsing device"
|
||||||
msgstr "Error al examinar el dispositivo"
|
msgstr "Error al examinar el dispositivo"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:242
|
#: ../js/ui/status/bluetooth.js:243
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The requested device cannot be browsed, error is '%s'"
|
msgid "The requested device cannot be browsed, error is '%s'"
|
||||||
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
|
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
|
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
|
||||||
msgid "Keyboard Settings"
|
msgid "Keyboard Settings"
|
||||||
msgstr "Configuración del teclado"
|
msgstr "Configuración del teclado"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:255
|
#: ../js/ui/status/bluetooth.js:256
|
||||||
msgid "Mouse Settings"
|
msgid "Mouse Settings"
|
||||||
msgstr "Ajustes del ratón…"
|
msgstr "Ajustes del ratón…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
|
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:63
|
||||||
msgid "Sound Settings"
|
msgid "Sound Settings"
|
||||||
msgstr "Configuración del sonido"
|
msgstr "Configuración del sonido"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
|
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||||
#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
|
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||||
msgid "Bluetooth Agent"
|
msgid "Bluetooth Agent"
|
||||||
msgstr "Agente Bluetooth"
|
msgstr "Agente Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:371
|
#: ../js/ui/status/bluetooth.js:372
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Authorization request from %s"
|
msgid "Authorization request from %s"
|
||||||
msgstr "Solicitud de autorización de %s"
|
msgstr "Solicitud de autorización de %s"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:377
|
#: ../js/ui/status/bluetooth.js:378
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants access to the service '%s'"
|
msgid "Device %s wants access to the service '%s'"
|
||||||
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
|
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:379
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
msgid "Always grant access"
|
msgid "Always grant access"
|
||||||
msgstr "Conceder acceso siempre"
|
msgstr "Conceder acceso siempre"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:380
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
msgid "Grant this time only"
|
msgid "Grant this time only"
|
||||||
msgstr "Conceder sólo esta vez"
|
msgstr "Conceder sólo esta vez"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:381
|
#: ../js/ui/status/bluetooth.js:382
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
msgstr "Rechazar"
|
msgstr "Rechazar"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:411
|
#: ../js/ui/status/bluetooth.js:412
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing confirmation for %s"
|
msgid "Pairing confirmation for %s"
|
||||||
msgstr "Confirmación de emparejamiento para «%s»"
|
msgstr "Confirmación de emparejamiento para «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
|
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants to pair with this computer"
|
msgid "Device %s wants to pair with this computer"
|
||||||
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:418
|
#: ../js/ui/status/bluetooth.js:419
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||||
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
|
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:420
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
msgid "Matches"
|
msgid "Matches"
|
||||||
msgstr "Coincide"
|
msgstr "Coincide"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:421
|
#: ../js/ui/status/bluetooth.js:422
|
||||||
msgid "Does not match"
|
msgid "Does not match"
|
||||||
msgstr "No coincide"
|
msgstr "No coincide"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:444
|
#: ../js/ui/status/bluetooth.js:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing request for %s"
|
msgid "Pairing request for %s"
|
||||||
msgstr "Solicitud de emparejamiento para «%s»"
|
msgstr "Solicitud de emparejamiento para «%s»"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:452
|
#: ../js/ui/status/bluetooth.js:453
|
||||||
msgid "Please enter the PIN mentioned on the device."
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:468
|
#: ../js/ui/status/bluetooth.js:469
|
||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "Aceptar"
|
msgstr "Aceptar"
|
||||||
|
|
||||||
@ -946,32 +943,32 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sonidos del sistema"
|
msgstr "Sonidos del sistema"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1233
|
#: ../src/shell-global.c:1366
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "Hace menos de un minuto"
|
msgstr "Hace menos de un minuto"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1237
|
#: ../src/shell-global.c:1370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "Hace %d minuto"
|
msgstr[0] "Hace %d minuto"
|
||||||
msgstr[1] "Hace %d minutos"
|
msgstr[1] "Hace %d minutos"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1242
|
#: ../src/shell-global.c:1375
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "Hace %d hora"
|
msgstr[0] "Hace %d hora"
|
||||||
msgstr[1] "Hace %d horas"
|
msgstr[1] "Hace %d horas"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1247
|
#: ../src/shell-global.c:1380
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "Hace %d día"
|
msgstr[0] "Hace %d día"
|
||||||
msgstr[1] "Hace %d días"
|
msgstr[1] "Hace %d días"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1252
|
#: ../src/shell-global.c:1385
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -1018,8 +1015,8 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||||
#~ "in time."
|
#~ "in time."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
|
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
|
||||||
#~ "segundos en la hora."
|
#~ "en la hora."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "This key specifies the format used by the panel clock when the format key "
|
#~ "This key specifies the format used by the panel clock when the format key "
|
||||||
@ -1036,19 +1033,18 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
#~ "format specified in the custom_format key. Note that if set to either "
|
||||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||||
#~ "ignored."
|
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
|
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
|
||||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
|
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||||
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
|
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||||
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
|
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
|
||||||
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
|
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
|
||||||
#~ "especificado en la clave «custom_format». Note que si se establece a "
|
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
|
||||||
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
|
#~ "ignoran las claves «show_date» y «show_seconds»."
|
||||||
|
|
||||||
#~ msgid "Clock Format"
|
#~ msgid "Clock Format"
|
||||||
#~ msgstr "Formato del reloj"
|
#~ msgstr "Formato del reloj"
|
||||||
|
@ -98,6 +98,7 @@ st_source_h = \
|
|||||||
st/st-tooltip.h \
|
st/st-tooltip.h \
|
||||||
st/st-types.h \
|
st/st-types.h \
|
||||||
st/st-widget.h \
|
st/st-widget.h \
|
||||||
|
st/st-widget-accessible.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
st.h: stamp-st.h
|
st.h: stamp-st.h
|
||||||
|
@ -81,6 +81,8 @@ libgnome_shell_la_SOURCES = \
|
|||||||
shell-wm-private.h \
|
shell-wm-private.h \
|
||||||
gnome-shell-plugin.c \
|
gnome-shell-plugin.c \
|
||||||
shell-app.c \
|
shell-app.c \
|
||||||
|
shell-a11y.h \
|
||||||
|
shell-a11y.c \
|
||||||
shell-app-system.c \
|
shell-app-system.c \
|
||||||
shell-app-usage.c \
|
shell-app-usage.c \
|
||||||
shell-arrow.c \
|
shell-arrow.c \
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
#include "shell-perf-log.h"
|
#include "shell-perf-log.h"
|
||||||
#include "shell-wm-private.h"
|
#include "shell-wm-private.h"
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
#include "shell-a11y.h"
|
||||||
|
|
||||||
static void gnome_shell_plugin_dispose (GObject *object);
|
static void gnome_shell_plugin_dispose (GObject *object);
|
||||||
static void gnome_shell_plugin_finalize (GObject *object);
|
static void gnome_shell_plugin_finalize (GObject *object);
|
||||||
@ -420,6 +421,8 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||||
|
|
||||||
|
shell_a11y_init ();
|
||||||
|
|
||||||
settings = gtk_settings_get_default ();
|
settings = gtk_settings_get_default ();
|
||||||
g_object_connect (settings,
|
g_object_connect (settings,
|
||||||
"signal::notify::gtk-xft-dpi",
|
"signal::notify::gtk-xft-dpi",
|
||||||
|
@ -219,12 +219,23 @@ def start_shell(perf_output=None):
|
|||||||
js_dir = os.path.join('@pkgdatadir@', 'js')
|
js_dir = os.path.join('@pkgdatadir@', 'js')
|
||||||
|
|
||||||
# Set up environment
|
# Set up environment
|
||||||
|
|
||||||
|
# About the value of NO_GAIL and NO_AT_BRIDGE: If a11y is enabled,
|
||||||
|
# gtk_init() will normally load gail and at-bridge. But we don't
|
||||||
|
# want at-bridge to be loaded until after clutter is initialized
|
||||||
|
# (which mutter does after initializing gtk) and we don't want
|
||||||
|
# gail to be loaded at all. So set these flags. shell_a11y_init()
|
||||||
|
# will clear them so they don't get passed to gnome-shell's
|
||||||
|
# children.
|
||||||
|
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
env.update({'GNOME_SHELL_JS' : js_dir,
|
env.update({'GNOME_SHELL_JS' : js_dir,
|
||||||
'PATH' : '@MUTTER_BIN_DIR@:' + os.environ.get('PATH', ''),
|
'PATH' : '@MUTTER_BIN_DIR@:' + os.environ.get('PATH', ''),
|
||||||
'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'),
|
'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'),
|
||||||
'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share'),
|
'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share'),
|
||||||
'GNOME_DISABLE_CRASH_DIALOG' : '1'})
|
'GNOME_DISABLE_CRASH_DIALOG' : '1',
|
||||||
|
'NO_GAIL' : '1',
|
||||||
|
'NO_AT_BRIDGE' : '1'})
|
||||||
|
|
||||||
if running_from_source_tree:
|
if running_from_source_tree:
|
||||||
env.update({'GNOME_SHELL_DATADIR' : data_dir,
|
env.update({'GNOME_SHELL_DATADIR' : data_dir,
|
||||||
|
165
src/shell-a11y.c
Normal file
165
src/shell-a11y.c
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Igalia, S.L.
|
||||||
|
*
|
||||||
|
* Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <gmodule.h>
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
|
#include "shell-a11y.h"
|
||||||
|
|
||||||
|
#define INIT_METHOD "gnome_accessibility_module_init"
|
||||||
|
#define DESKTOP_SCHEMA "org.gnome.desktop.interface"
|
||||||
|
#define ACCESSIBILITY_ENABLED_KEY "accessibility"
|
||||||
|
#define AT_SPI_SCHEMA "org.a11y.atspi"
|
||||||
|
#define ATK_BRIDGE_LOCATION_KEY "atk-bridge-location"
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
should_enable_a11y (void)
|
||||||
|
{
|
||||||
|
GSettings *desktop_settings = NULL;
|
||||||
|
gboolean value = FALSE;
|
||||||
|
|
||||||
|
desktop_settings = g_settings_new (DESKTOP_SCHEMA);
|
||||||
|
value = g_settings_get_boolean (desktop_settings, ACCESSIBILITY_ENABLED_KEY);
|
||||||
|
|
||||||
|
g_object_unref (desktop_settings);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char*
|
||||||
|
get_atk_bridge_path (void)
|
||||||
|
{
|
||||||
|
GSettings *atspi_settings = NULL;
|
||||||
|
char *value = NULL;
|
||||||
|
const char * const *schemas = NULL;
|
||||||
|
gboolean found = FALSE;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
schemas = g_settings_list_schemas ();
|
||||||
|
|
||||||
|
for (i = 0; schemas [i]; i++)
|
||||||
|
{
|
||||||
|
if (!strcmp (schemas[i], AT_SPI_SCHEMA))
|
||||||
|
{
|
||||||
|
found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
g_warning ("Accessibility: %s schema not found. Are you sure that at-spi or"
|
||||||
|
" at-spi2 is installed on your system?", AT_SPI_SCHEMA);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
atspi_settings = g_settings_new (AT_SPI_SCHEMA);
|
||||||
|
value = g_settings_get_string (atspi_settings, ATK_BRIDGE_LOCATION_KEY);
|
||||||
|
|
||||||
|
g_object_unref (atspi_settings);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
a11y_invoke_module (const char *module_path)
|
||||||
|
{
|
||||||
|
GModule *handle;
|
||||||
|
void (*invoke_fn) (void);
|
||||||
|
|
||||||
|
if (!module_path)
|
||||||
|
{
|
||||||
|
g_warning ("Accessibility: invalid module path (NULL)");
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(handle = g_module_open (module_path, 0)))
|
||||||
|
{
|
||||||
|
g_warning ("Accessibility: failed to load module '%s': '%s'",
|
||||||
|
module_path, g_module_error ());
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_module_symbol (handle, INIT_METHOD, (gpointer *)&invoke_fn))
|
||||||
|
{
|
||||||
|
g_warning ("Accessibility: error library '%s' does not include "
|
||||||
|
"method '%s' required for accessibility support",
|
||||||
|
module_path, INIT_METHOD);
|
||||||
|
g_module_close (handle);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
invoke_fn ();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It loads the atk-bridge if required. It checks:
|
||||||
|
* * If the proper gsetting key is set
|
||||||
|
* * If clutter has already enabled the accessibility
|
||||||
|
*
|
||||||
|
* You need to ensure that the atk-bridge was not loaded before this
|
||||||
|
* call, because in that case the application would be already
|
||||||
|
* registered on at-spi using the AtkUtil implementation on that
|
||||||
|
* moment (if any, although without anyone the application would
|
||||||
|
* crash). Anyway this is the reason of NO_AT_BRIDGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
shell_a11y_init (void)
|
||||||
|
{
|
||||||
|
char *bridge_path = NULL;
|
||||||
|
|
||||||
|
g_unsetenv ("NO_AT_BRIDGE");
|
||||||
|
g_unsetenv ("NO_GAIL");
|
||||||
|
|
||||||
|
if (!should_enable_a11y ())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (clutter_get_accessibility_enabled () == FALSE)
|
||||||
|
{
|
||||||
|
g_warning ("Accessibility: clutter has no accessibility enabled"
|
||||||
|
" skipping the atk-bridge load");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bridge_path = get_atk_bridge_path ();
|
||||||
|
|
||||||
|
if (a11y_invoke_module (bridge_path) == FALSE)
|
||||||
|
{
|
||||||
|
g_warning ("Accessibility: error loading the atk-bridge. Although the"
|
||||||
|
" accessibility on the system is enabled and clutter"
|
||||||
|
" accessibility is also enabled, accessibility support on"
|
||||||
|
" GNOME Shell will not work");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NOTE: We avoid to load gail module, as gail-cally interaction is
|
||||||
|
* not fully supported right now.
|
||||||
|
*/
|
||||||
|
|
||||||
|
g_free (bridge_path);
|
||||||
|
}
|
32
src/shell-a11y.h
Normal file
32
src/shell-a11y.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Igalia, S.L.
|
||||||
|
*
|
||||||
|
* Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SHELL_A11Y_H_
|
||||||
|
#define __SHELL_A11Y_H_
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
void shell_a11y_init (void);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __SHELL_A11Y_H_ */
|
@ -44,6 +44,8 @@
|
|||||||
#include "st-private.h"
|
#include "st-private.h"
|
||||||
#include "st-widget.h"
|
#include "st-widget.h"
|
||||||
|
|
||||||
|
#include <st/st-widget-accessible.h>
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
@ -65,6 +67,8 @@ struct _StLabelPrivate
|
|||||||
|
|
||||||
G_DEFINE_TYPE (StLabel, st_label, ST_TYPE_WIDGET);
|
G_DEFINE_TYPE (StLabel, st_label, ST_TYPE_WIDGET);
|
||||||
|
|
||||||
|
static GType st_label_accessible_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_label_set_property (GObject *gobject,
|
st_label_set_property (GObject *gobject,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -290,6 +294,7 @@ st_label_class_init (StLabelClass *klass)
|
|||||||
actor_class->unmap = st_label_unmap;
|
actor_class->unmap = st_label_unmap;
|
||||||
|
|
||||||
widget_class->style_changed = st_label_style_changed;
|
widget_class->style_changed = st_label_style_changed;
|
||||||
|
widget_class->get_accessible_type = st_label_accessible_get_type;
|
||||||
|
|
||||||
pspec = g_param_spec_object ("clutter-text",
|
pspec = g_param_spec_object ("clutter-text",
|
||||||
"Clutter Text",
|
"Clutter Text",
|
||||||
@ -403,3 +408,100 @@ st_label_get_clutter_text (StLabel *label)
|
|||||||
|
|
||||||
return label->priv->label;
|
return label->priv->label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*************************** ACCESSIBILITY SUPPORT ****************************/
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
#define ST_TYPE_LABEL_ACCESSIBLE st_label_accessible_get_type ()
|
||||||
|
|
||||||
|
#define ST_LABEL_ACCESSIBLE(obj) \
|
||||||
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
|
||||||
|
ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessible))
|
||||||
|
|
||||||
|
#define ST_IS_LABEL_ACCESSIBLE(obj) \
|
||||||
|
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
|
||||||
|
ST_TYPE_LABEL_ACCESSIBLE))
|
||||||
|
|
||||||
|
#define ST_LABEL_ACCESSIBLE_CLASS(klass) \
|
||||||
|
(G_TYPE_CHECK_CLASS_CAST ((klass), \
|
||||||
|
ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessibleClass))
|
||||||
|
|
||||||
|
#define ST_IS_LABEL_ACCESSIBLE_CLASS(klass) \
|
||||||
|
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
|
||||||
|
ST_TYPE_LABEL_ACCESSIBLE))
|
||||||
|
|
||||||
|
#define ST_LABEL_ACCESSIBLE_GET_CLASS(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
|
||||||
|
ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessibleClass))
|
||||||
|
|
||||||
|
typedef struct _StLabelAccessible StLabelAccessible;
|
||||||
|
typedef struct _StLabelAccessibleClass StLabelAccessibleClass;
|
||||||
|
|
||||||
|
struct _StLabelAccessible
|
||||||
|
{
|
||||||
|
StWidgetAccessible parent;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _StLabelAccessibleClass
|
||||||
|
{
|
||||||
|
StWidgetAccessibleClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void st_label_accessible_class_init (StLabelAccessibleClass *klass);
|
||||||
|
static void st_label_accessible_init (StLabelAccessible *label);
|
||||||
|
|
||||||
|
/* AtkObject */
|
||||||
|
static void st_label_accessible_initialize (AtkObject *obj,
|
||||||
|
gpointer data);
|
||||||
|
static const gchar * st_label_accessible_get_name (AtkObject *obj);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (StLabelAccessible, st_label_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_label_accessible_class_init (StLabelAccessibleClass *klass)
|
||||||
|
{
|
||||||
|
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
atk_class->initialize = st_label_accessible_initialize;
|
||||||
|
atk_class->get_name = st_label_accessible_get_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_label_accessible_init (StLabelAccessible *self)
|
||||||
|
{
|
||||||
|
/* initialization done on AtkObject->initialize */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_label_accessible_initialize (AtkObject *obj,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
ATK_OBJECT_CLASS (st_label_accessible_parent_class)->initialize (obj, data);
|
||||||
|
|
||||||
|
obj->role = ATK_ROLE_LABEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const gchar *
|
||||||
|
st_label_accessible_get_name (AtkObject *obj)
|
||||||
|
{
|
||||||
|
const gchar *name = NULL;
|
||||||
|
|
||||||
|
g_return_val_if_fail (ST_IS_LABEL_ACCESSIBLE (obj), NULL);
|
||||||
|
|
||||||
|
name = ATK_OBJECT_CLASS (st_label_accessible_parent_class)->get_name (obj);
|
||||||
|
if (name == NULL)
|
||||||
|
{
|
||||||
|
ClutterActor *actor = NULL;
|
||||||
|
|
||||||
|
actor = CLUTTER_ACTOR (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (obj)));
|
||||||
|
|
||||||
|
if (actor == NULL) /* State is defunct */
|
||||||
|
name = NULL;
|
||||||
|
else
|
||||||
|
name = st_label_get_text (ST_LABEL (actor));
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
76
src/st/st-widget-accessible.h
Normal file
76
src/st/st-widget-accessible.h
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
/*
|
||||||
|
* st-widget-accessible.h: Accessible object for StWidget
|
||||||
|
*
|
||||||
|
* Copyright 2010 Igalia, S.L.
|
||||||
|
* Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU Lesser General Public License,
|
||||||
|
* version 2.1, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT ANY
|
||||||
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION)
|
||||||
|
#error "Only <st/st.h> can be included directly.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ST_WIDGET_ACCESSIBLE_H__
|
||||||
|
#define __ST_WIDGET_ACCESSIBLE_H__
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#include <st/st-widget.h>
|
||||||
|
#include <cally/cally.h>
|
||||||
|
|
||||||
|
#define ST_TYPE_WIDGET_ACCESSIBLE st_widget_accessible_get_type ()
|
||||||
|
|
||||||
|
#define ST_WIDGET_ACCESSIBLE(obj) \
|
||||||
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
|
||||||
|
ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessible))
|
||||||
|
|
||||||
|
#define ST_IS_WIDGET_ACCESSIBLE(obj) \
|
||||||
|
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
|
||||||
|
ST_TYPE_WIDGET_ACCESSIBLE))
|
||||||
|
|
||||||
|
#define ST_WIDGET_ACCESSIBLE_CLASS(klass) \
|
||||||
|
(G_TYPE_CHECK_CLASS_CAST ((klass), \
|
||||||
|
ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessibleClass))
|
||||||
|
|
||||||
|
#define ST_IS_WIDGET_ACCESSIBLE_CLASS(klass) \
|
||||||
|
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
|
||||||
|
ST_TYPE_WIDGET_ACCESSIBLE))
|
||||||
|
|
||||||
|
#define ST_WIDGET_ACCESSIBLE_GET_CLASS(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
|
||||||
|
ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessibleClass))
|
||||||
|
|
||||||
|
typedef struct _StWidgetAccessible StWidgetAccessible;
|
||||||
|
typedef struct _StWidgetAccessibleClass StWidgetAccessibleClass;
|
||||||
|
typedef struct _StWidgetAccessiblePrivate StWidgetAccessiblePrivate;
|
||||||
|
|
||||||
|
struct _StWidgetAccessible
|
||||||
|
{
|
||||||
|
CallyActor parent;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
StWidgetAccessiblePrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _StWidgetAccessibleClass
|
||||||
|
{
|
||||||
|
CallyActorClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
GType st_widget_accessible_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __ST_WIDGET_ACCESSIBLE_H__ */
|
@ -42,6 +42,8 @@
|
|||||||
#include "st-tooltip.h"
|
#include "st-tooltip.h"
|
||||||
#include "st-theme-node-transition.h"
|
#include "st-theme-node-transition.h"
|
||||||
|
|
||||||
|
#include "st-widget-accessible.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Forward declaration for sake of StWidgetChild
|
* Forward declaration for sake of StWidgetChild
|
||||||
*/
|
*/
|
||||||
@ -67,6 +69,8 @@ struct _StWidgetPrivate
|
|||||||
StTooltip *tooltip;
|
StTooltip *tooltip;
|
||||||
|
|
||||||
StTextDirection direction;
|
StTextDirection direction;
|
||||||
|
|
||||||
|
AtkObject *accessible;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -117,6 +121,8 @@ static gboolean st_widget_real_navigate_focus (StWidget *widget,
|
|||||||
ClutterActor *from,
|
ClutterActor *from,
|
||||||
GtkDirectionType direction);
|
GtkDirectionType direction);
|
||||||
|
|
||||||
|
static AtkObject * st_widget_get_accessible (ClutterActor *actor);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_widget_set_property (GObject *gobject,
|
st_widget_set_property (GObject *gobject,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -281,6 +287,12 @@ st_widget_dispose (GObject *gobject)
|
|||||||
priv->tooltip = NULL;
|
priv->tooltip = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The real dispose of this accessible is done on
|
||||||
|
* AtkGObjectAccessible weak ref callback
|
||||||
|
*/
|
||||||
|
if (priv->accessible)
|
||||||
|
priv->accessible = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject);
|
G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,8 +737,11 @@ st_widget_class_init (StWidgetClass *klass)
|
|||||||
actor_class->key_focus_out = st_widget_key_focus_out;
|
actor_class->key_focus_out = st_widget_key_focus_out;
|
||||||
actor_class->hide = st_widget_hide;
|
actor_class->hide = st_widget_hide;
|
||||||
|
|
||||||
|
actor_class->get_accessible = st_widget_get_accessible;
|
||||||
|
|
||||||
klass->style_changed = st_widget_real_style_changed;
|
klass->style_changed = st_widget_real_style_changed;
|
||||||
klass->navigate_focus = st_widget_real_navigate_focus;
|
klass->navigate_focus = st_widget_real_navigate_focus;
|
||||||
|
klass->get_accessible_type = st_widget_accessible_get_type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* StWidget:pseudo-class:
|
* StWidget:pseudo-class:
|
||||||
@ -1948,3 +1963,193 @@ st_get_slow_down_factor ()
|
|||||||
{
|
{
|
||||||
return st_slow_down_factor;
|
return st_slow_down_factor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*************************** ACCESSIBILITY SUPPORT ****************************/
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
/* GObject */
|
||||||
|
|
||||||
|
static void st_widget_accessible_class_init (StWidgetAccessibleClass *klass);
|
||||||
|
static void st_widget_accessible_init (StWidgetAccessible *widget);
|
||||||
|
|
||||||
|
/* AtkObject */
|
||||||
|
static AtkStateSet *st_widget_accessible_ref_state_set (AtkObject *obj);
|
||||||
|
static void st_widget_accessible_initialize (AtkObject *obj,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
|
/* Private methods */
|
||||||
|
static void on_pseudo_class_notify (GObject *gobject,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer data);
|
||||||
|
static void on_can_focus_notify (GObject *gobject,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer data);
|
||||||
|
static void check_selected (StWidgetAccessible *self,
|
||||||
|
StWidget *widget);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (StWidgetAccessible, st_widget_accessible, CALLY_TYPE_ACTOR)
|
||||||
|
|
||||||
|
#define ST_WIDGET_ACCESSIBLE_GET_PRIVATE(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_WIDGET_ACCESSIBLE, \
|
||||||
|
StWidgetAccessiblePrivate))
|
||||||
|
|
||||||
|
struct _StWidgetAccessiblePrivate
|
||||||
|
{
|
||||||
|
/* Cached values (used to avoid extra notifications) */
|
||||||
|
gboolean selected;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static AtkObject *
|
||||||
|
st_widget_get_accessible (ClutterActor *actor)
|
||||||
|
{
|
||||||
|
StWidget *widget = NULL;
|
||||||
|
|
||||||
|
g_return_val_if_fail (ST_IS_WIDGET (actor), NULL);
|
||||||
|
|
||||||
|
widget = ST_WIDGET (actor);
|
||||||
|
|
||||||
|
if (widget->priv->accessible == NULL)
|
||||||
|
{
|
||||||
|
widget->priv->accessible =
|
||||||
|
g_object_new (ST_WIDGET_GET_CLASS (widget)->get_accessible_type (),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
atk_object_initialize (widget->priv->accessible, actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
return widget->priv->accessible;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_widget_accessible_class_init (StWidgetAccessibleClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
atk_class->ref_state_set = st_widget_accessible_ref_state_set;
|
||||||
|
atk_class->initialize = st_widget_accessible_initialize;
|
||||||
|
|
||||||
|
g_type_class_add_private (gobject_class, sizeof (StWidgetAccessiblePrivate));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_widget_accessible_init (StWidgetAccessible *self)
|
||||||
|
{
|
||||||
|
StWidgetAccessiblePrivate *priv = ST_WIDGET_ACCESSIBLE_GET_PRIVATE (self);
|
||||||
|
|
||||||
|
self->priv = priv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_widget_accessible_initialize (AtkObject *obj,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
ATK_OBJECT_CLASS (st_widget_accessible_parent_class)->initialize (obj, data);
|
||||||
|
|
||||||
|
g_signal_connect (data, "notify::pseudo-class",
|
||||||
|
G_CALLBACK (on_pseudo_class_notify),
|
||||||
|
obj);
|
||||||
|
|
||||||
|
g_signal_connect (data, "notify::can-focus",
|
||||||
|
G_CALLBACK (on_can_focus_notify),
|
||||||
|
obj);
|
||||||
|
|
||||||
|
/* Check the cached selected state and notify the first selection.
|
||||||
|
* Ie: it is required to ensure a first notification when Alt+Tab
|
||||||
|
* popup appears
|
||||||
|
*/
|
||||||
|
check_selected (ST_WIDGET_ACCESSIBLE (obj), ST_WIDGET (data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static AtkStateSet *
|
||||||
|
st_widget_accessible_ref_state_set (AtkObject *obj)
|
||||||
|
{
|
||||||
|
AtkStateSet *result = NULL;
|
||||||
|
ClutterActor *actor = NULL;
|
||||||
|
StWidget *widget = NULL;
|
||||||
|
StWidgetAccessible *self = NULL;
|
||||||
|
|
||||||
|
result = ATK_OBJECT_CLASS (st_widget_accessible_parent_class)->ref_state_set (obj);
|
||||||
|
|
||||||
|
actor = CLUTTER_ACTOR (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (obj)));
|
||||||
|
|
||||||
|
if (actor == NULL) /* State is defunct */
|
||||||
|
return result;
|
||||||
|
|
||||||
|
widget = ST_WIDGET (actor);
|
||||||
|
self = ST_WIDGET_ACCESSIBLE (obj);
|
||||||
|
|
||||||
|
/* priv->selected should be properly updated on the
|
||||||
|
* ATK_STATE_SELECTED notification callbacks
|
||||||
|
*/
|
||||||
|
if (self->priv->selected)
|
||||||
|
atk_state_set_add_state (result, ATK_STATE_SELECTED);
|
||||||
|
|
||||||
|
/* On clutter there isn't any tip to know if a actor is focusable or
|
||||||
|
* not, anyone can receive the key_focus. For this reason
|
||||||
|
* cally_actor sets any actor as FOCUSABLE. This is not the case on
|
||||||
|
* St, where we have can_focus. But this means that we need to
|
||||||
|
* remove the state FOCUSABLE if it is not focusable
|
||||||
|
*/
|
||||||
|
if (st_widget_get_can_focus (widget))
|
||||||
|
atk_state_set_add_state (result, ATK_STATE_FOCUSABLE);
|
||||||
|
else
|
||||||
|
atk_state_set_remove_state (result, ATK_STATE_FOCUSABLE);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_pseudo_class_notify (GObject *gobject,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
check_selected (ST_WIDGET_ACCESSIBLE (data),
|
||||||
|
ST_WIDGET (gobject));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This method checks if the widget is selected, and notify a atk
|
||||||
|
* state change if required
|
||||||
|
*
|
||||||
|
* In order to decide if there was a selection, we use the current
|
||||||
|
* pseudo-class of the widget searching for "selected", the current
|
||||||
|
* homogeneus way to check if a item is selected (see bug 637830)
|
||||||
|
*
|
||||||
|
* In a ideal world we would have a more standard way to check if the
|
||||||
|
* item is selected or not, like the widget-context (as in the case of
|
||||||
|
* gtktreeview-cells), or something like the property "can-focus". But
|
||||||
|
* for the moment this is enough, and we can update that in the future
|
||||||
|
* if required.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
check_selected (StWidgetAccessible *self,
|
||||||
|
StWidget *widget)
|
||||||
|
{
|
||||||
|
gboolean found = FALSE;
|
||||||
|
|
||||||
|
found = st_widget_has_style_pseudo_class (widget,
|
||||||
|
"selected");
|
||||||
|
|
||||||
|
if (found != self->priv->selected)
|
||||||
|
{
|
||||||
|
self->priv->selected = found;
|
||||||
|
atk_object_notify_state_change (ATK_OBJECT (self),
|
||||||
|
ATK_STATE_SELECTED,
|
||||||
|
found);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_can_focus_notify (GObject *gobject,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
gboolean can_focus = st_widget_get_can_focus (ST_WIDGET (gobject));
|
||||||
|
|
||||||
|
atk_object_notify_state_change (ATK_OBJECT (data),
|
||||||
|
ATK_STATE_FOCUSABLE, can_focus);
|
||||||
|
}
|
||||||
|
@ -82,6 +82,8 @@ struct _StWidgetClass
|
|||||||
gboolean (* navigate_focus) (StWidget *self,
|
gboolean (* navigate_focus) (StWidget *self,
|
||||||
ClutterActor *from,
|
ClutterActor *from,
|
||||||
GtkDirectionType direction);
|
GtkDirectionType direction);
|
||||||
|
|
||||||
|
GType (*get_accessible_type) (void);
|
||||||
};
|
};
|
||||||
|
|
||||||
GType st_widget_get_type (void) G_GNUC_CONST;
|
GType st_widget_get_type (void) G_GNUC_CONST;
|
||||||
|
Loading…
Reference in New Issue
Block a user