Date   
[NVDA] #56: Better handling of stdout/stderr

"NVDA Trac" <announce@...>
 

#56: Better handling of stdout/stderr
--------------------+-------------------------------------------------------
Reporter: jteh | Owner:
Type: defect | Status: new
Priority: minor | Milestone: 0.6
Component: Core | Version: trunk
Keywords: | Blocking:
Blockedby: |
--------------------+-------------------------------------------------------
At present, output to stdout/stderr pops up a wxPython dilog containing
the text. This is rather annoying and ugly. Output to stdout/stderr should
be written to the NVDA log file using the normal NVDA logging mechanism.
* A class needs to be written which supports the normal file stream
methods. Instead of writing to a file, these methods will cause the output
to be logged.
* We need to figure out how to stop wxPython from overriding this with
its own stdout/stderr handler.

--
Ticket URL: <http://trac.nvda-project.org/index.fcgi/ticket/56>
NVDA <http://www.nvda-project.org/>
A free and open-source screen reader for Windows

Re: [NVDA] #8: Improve status bar search

"NVDA Trac" <announce@...>
 

#8: Improve status bar search
-----------------------+----------------------------------------------------
Reporter: tvalusek | Owner: jteh
Type: defect | Status: accepted
Priority: minor | Milestone: 0.6
Component: Core | Version: trunk
Resolution: | Keywords:
Blocking: | Blockedby:
-----------------------+----------------------------------------------------
Changes (by jteh):

* status: assigned => accepted


--
Ticket URL: <http://trac.nvda-project.org/index.fcgi/ticket/8#comment:3>
NVDA <http://www.nvda-project.org/>
A free and open-source screen reader for Windows

svn updates

"Michel Such" <michel.such@...>
 

Hi all,

We used to receive info about updates on this list and it does not seem to happen anymore.
Has anything changed recently?
Ôà

Re: [NVDA] #40: GDIHooking library for NVDA

"NVDA Trac" <announce@...>
 

#40: GDIHooking library for NVDA
--------------------------+-------------------------------------------------
Reporter: aleksey_s | Owner: aleksey_s
Type: enhancement | Status: accepted
Priority: major | Milestone: 0.6
Component: Core | Version: trunk
Resolution: | Keywords: gdi hooks
Blocking: | Blockedby:
--------------------------+-------------------------------------------------

Comment(by aleksey_s):

11 Ђ¤¬Ё­Ёбва в®а <Ђ¤¬Ё­Ёбва в®а@...5...> 2008-04-02
*Completely rewritten hooking mechanizm, now it must be stable in
multithreaded applications. Thanks to my friend Sergey Starovoy for
routines to calculate opcode size and other tips.

--
Ticket URL: <http://trac.nvda-project.org/ticket/40#comment:6>
NVDA <http://www.nvda-project.org/>
A free and open-source screen reader for Windows

commit r1875 - in trunk: . source/NVDAObjects/IAccessible source/appModules

NVDA Subversion <svn@...>
 

Author: jteh
Date: Thu Apr 3 01:51:57 2008
New Revision: 1875

Log:
Changes to status bar reporting:
* Status bars are generally at the bottom of the screen. Therefore, the reportStatusLine script now searches for the status bar by getting the object at the bottom left of the foreground object using screen coordinates. reportStatusLine now works in many more applications, including Mozilla products. Implements #8.
* The reportStatusLine script now handles concatenation of the name/value for all children, rather than having a StatusBar NVDAObject which does this and fakes an object with no children. This means that one can now access the real representation of a status bar, which may actually be easier if one is only interested in certain portions of the information.
* Remove the statusBar property of IAccessible NVDAObjects, as this is no longer necessary.
Fix the children property of IAccessible NVDAObjects to correctly handle children which are a completely different object to the parent. This fixes reading of Mozilla status bars.


Modified:
trunk/ (props changed)
trunk/source/NVDAObjects/IAccessible/__init__.py
trunk/source/appModules/_default.py

Modified: trunk/source/NVDAObjects/IAccessible/__init__.py
==============================================================================
--- trunk/source/NVDAObjects/IAccessible/__init__.py (original)
+++ trunk/source/NVDAObjects/IAccessible/__init__.py Thu Apr 3 01:51:57 2008
@@ -372,10 +372,12 @@
return []
children=[]
for child in IAccessibleHandler.accessibleChildren(self.IAccessibleObject,0,childCount):
- if child and child[0]==self.IAccessibleObject:
+ if child[0]==self.IAccessibleObject:
children.append(IAccessible(windowHandle=self.windowHandle,IAccessibleObject=self.IAccessibleObject,IAccessibleChildID=child[1],event_windowHandle=self.event_windowHandle,event_objectID=self.event_objectID,event_childID=child[1]))
- elif child and child[0].accRole(child[1])==IAccessibleHandler.ROLE_SYSTEM_WINDOW:
+ elif child[0].accRole(child[1])==IAccessibleHandler.ROLE_SYSTEM_WINDOW:
children.append(getNVDAObjectFromEvent(IAccessibleHandler.windowFromAccessibleObject(child[0]),IAccessibleHandler.OBJID_CLIENT,0))
+ else:
+ children.append(IAccessible(IAccessibleObject=child[0],IAccessibleChildID=child[1]))
children=[x for x in children if x and winUser.isDescendantWindow(self.windowHandle,x.windowHandle)]
return children

@@ -402,21 +404,6 @@
except:
pass

- def _get_statusBar(self):
- windowClasses=(u'msctls_statusbar32',u'TTntStatusBar.UnicodeClass',u'ATL:msctls_statusbar32')
- curWindow=self.windowHandle
- statusWindow=0
- while not statusWindow and curWindow:
- for windowClass in windowClasses:
- statusWindow=ctypes.windll.user32.FindWindowExW(curWindow,0,windowClass,0)
- if statusWindow:
- break
- curWindow=winUser.getAncestor(curWindow,winUser.GA_PARENT)
- if statusWindow:
- return getNVDAObjectFromEvent(statusWindow,IAccessibleHandler.OBJID_CLIENT,0)
- else:
- return None
-
def _get_positionString(self):
position=""
childID=self.IAccessibleChildID
@@ -721,25 +708,6 @@
def _get_description(self):
return None

-class StatusBar(IAccessible):
-
- def _get_value(self):
- oldValue=super(StatusBar,self)._get_value()
- valueFromChildren=" ".join([" ".join([y for y in (x.name,x.value) if y and not y.isspace()]) for x in super(StatusBar,self)._get_children() if x.role in (controlTypes.ROLE_EDITABLETEXT,controlTypes.ROLE_STATICTEXT)])
- if valueFromChildren:
- return valueFromChildren
- else:
- return oldValue
-
- def _get_firstChild(self):
- return None
-
- def _get_lastChild(self):
- return None
-
- def _get_children(self):
- return []
-
class SysLink(IAccessible):

def reportFocus(self):
@@ -821,7 +789,6 @@
("Internet Explorer_Server",IAccessibleHandler.ROLE_SYSTEM_TEXT):"MSHTML.MSHTML",
("Internet Explorer_Server",IAccessibleHandler.ROLE_SYSTEM_PANE):"MSHTML.MSHTML",
("Internet Explorer_Server",IAccessibleHandler.ROLE_SYSTEM_CLIENT):"InternetExplorerClient",
- ("msctls_statusbar32",IAccessibleHandler.ROLE_SYSTEM_STATUSBAR):"StatusBar",
("TTntEdit.UnicodeClass",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
("TMaskEdit",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
("TTntMemo.UnicodeClass",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
@@ -840,7 +807,6 @@
("#32771",IAccessibleHandler.ROLE_SYSTEM_LISTITEM):"TaskListIcon",
("TInEdit.UnicodeClass",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
("TEdit",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
- ("TTntStatusBar.UnicodeClass",IAccessibleHandler.ROLE_SYSTEM_STATUSBAR):"StatusBar",
("ToolbarWindow32",IAccessibleHandler.ROLE_SYSTEM_PUSHBUTTON):"ToolBarButton",
("TFilenameEdit",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
("TSpinEdit",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
@@ -855,5 +821,4 @@
("TPasswordEdit",IAccessibleHandler.ROLE_SYSTEM_TEXT):"edit.Edit",
("#32768",IAccessibleHandler.ROLE_SYSTEM_MENUITEM):"MenuItem",
("ToolbarWindow32",IAccessibleHandler.ROLE_SYSTEM_MENUITEM):"MenuItem",
- ("ATL:msctls_statusbar32",IAccessibleHandler.ROLE_SYSTEM_STATUSBAR):"StatusBar",
}

Modified: trunk/source/appModules/_default.py
==============================================================================
--- trunk/source/appModules/_default.py (original)
+++ trunk/source/appModules/_default.py Thu Apr 3 01:51:57 2008
@@ -598,16 +598,32 @@
script_reportCurrentFocus.__doc__ = _("reports the object with focus")

def script_reportStatusLine(self,keyPress,nextScript):
- focus=api.getFocusObject()
- statusBarObject=focus.statusBar
- if not statusBarObject:
+ import NVDAObjects.IAccessible
+ # The status bar is usually at the bottom of the screen.
+ # Therefore, get the object at the bottom left of the foreground object using screen coordinates.
+ foreground = api.getForegroundObject()
+ left, top, width, height = foreground.location
+ bottom = top + height - 1
+ obj = NVDAObjects.IAccessible.getNVDAObjectFromPoint(left, bottom)
+
+ # We may have landed in a child of the status bar, so search the ancestry for a status bar.
+ while obj and not obj.role == controlTypes.ROLE_STATUSBAR:
+ obj = obj.parent
+
+ if not obj:
speech.speakMessage(_("no status bar found"))
return
+
+ text = obj.name
+ if text is None:
+ text = ""
+ text += " ".join(chunk for child in obj.children for chunk in (child.name, child.value) if chunk and isinstance(chunk, basestring) and not chunk.isspace())
+
if keyboardHandler.lastKeyCount == 1:
- speech.speakObject(statusBarObject,reason=speech.REASON_QUERY)
+ speech.speakMessage(text)
else:
- speech.speakSpelling(statusBarObject.value)
- api.setNavigatorObject(statusBarObject)
+ speech.speakSpelling(text)
+ api.setNavigatorObject(obj)
script_reportStatusLine.__doc__ = _("reads the current aplication status bar and moves the navigation cursor to it")

def script_toggleReportObjectUnderMouse(self,keyPress,nextScript):

Re: [NVDA] #8: Improve status bar search

"NVDA Trac" <trac@...>
 

#8: Improve status bar search
-----------------------+----------------------------------------------------
Reporter: tvalusek | Owner: jteh
Type: defect | Status: closed
Priority: minor | Milestone: 0.6
Component: Core | Version: trunk
Resolution: fixed | Keywords:
Blocking: | Blockedby:
-----------------------+----------------------------------------------------
Changes (by jteh):

* status: accepted => closed
* resolution: => fixed


Comment:

Implemented in r1875. I went for the second approach above; i.e. using the
object at the bottom left in terms of screen coordinates. Please comment
if reportStatusLine now fails in any cases where it used to work. Note
that this still won't work in applications that do not expose accessible
status bars; e.g. Microsoft Office 2000.

--
Ticket URL: <http://trac.nvda-project.org/ticket/8#comment:4>
NVDA <http://www.nvda-project.org/>
A free and open-source screen reader for Windows

NVDA project services now back to normal

James Teh <jamie@...>
 

Hi all,

As you know, we've moved all services for nvda-project.org and nvaccess.org to a new server. Hopefully, this should be a lot more reliable than our previous host; we were experiencing massive amounts of downtime and services were extremely slow far too often. So far, the new server is working well. Unfortunately, the transition was a little bumpier than expected:
* The initial domain transfer was broken and probably caused nvda-project.org to disappear for a while for some users.
* We had to move to another server less than a day after the initial move, causing more downtime and delays.
* Sending email to the nvda-dev list would have been bouncing for some users. I only discovered this issue this morning when I tried to send an email to the list. :)
* Trac login and registration was broken.
* Subversion commit emails were not being sent to nvda-dev.

All of these issues should now be fixed. We apologise for the inconvenience during the transition. However, now that it is done, services will hopefully be much more reliable henceforth.

Jamie

--
James Teh
Email: jamie@...8...
WWW: http://www.jantrid.net/
MSN Messenger: jamie@...8...
Jabber: jteh@...9...
Yahoo: jcs_teh

commit r1876 - trunk/source/NVDAObjects/IAccessible/IA2

NVDA Subversion <svn@...>
 

Author: mdcurran
Date: Thu Apr 3 04:55:27 2008
New Revision: 1876

Log:
IA2 NVDAObject's _isEqual method: if IA2's uniqueIDs and windowhandles are the same, then this is good enough to be True. Also put this check in a try except as it seems to fail in Gecko quite a bit.

Modified:
trunk/source/NVDAObjects/IAccessible/IA2/__init__.py

Modified: trunk/source/NVDAObjects/IAccessible/IA2/__init__.py
==============================================================================
--- trunk/source/NVDAObjects/IAccessible/IA2/__init__.py (original)
+++ trunk/source/NVDAObjects/IAccessible/IA2/__init__.py Thu Apr 3 04:55:27 2008
@@ -139,8 +139,12 @@
self.reviewPosition=self.makeTextInfo(textHandler.POSITION_CARET)

def _isEqual(self,other):
- if isinstance(other,IA2) and self.IAccessibleObject.UniqueID==other.IAccessibleObject.UniqueID and super(IAccessible,self)._isEqual(other):
- return True
+ try:
+ if isinstance(other,IA2) and self.IAccessibleObject.UniqueID==other.IAccessibleObject.UniqueID and self.IAccessibleObject.windowHandle==other.IAccessibleObject.windowHandle:
+ return True
+ except:
+ pass
+
return super(IA2,self)._isEqual(other)

def _get_role(self):

commit r1877 - trunk/source/appModules

NVDA Subversion <svn@...>
 

Author: pvagner
Date: Thu Apr 3 07:13:42 2008
New Revision: 1877

Log:
* since statusBar detection is reworked appmodule for media player classic needs to be updated to include the old code it relies upon

Modified:
trunk/source/appModules/mplayerc.py

Modified: trunk/source/appModules/mplayerc.py
==============================================================================
--- trunk/source/appModules/mplayerc.py (original)
+++ trunk/source/appModules/mplayerc.py Thu Apr 3 07:13:42 2008
@@ -5,7 +5,7 @@
#See the file COPYING for more details.

import appModuleHandler
-from NVDAObjects.IAccessible import IAccessible, StatusBar, getNVDAObjectFromEvent
+from NVDAObjects.IAccessible import IAccessible, getNVDAObjectFromEvent
import controlTypes
import api
import IAccessibleHandler
@@ -36,16 +36,24 @@
api.setNavigatorObject(statusBarObject)
script_reportStatusLine.__doc__ = _("reads the current aplication status bar and moves the navigation cursor to it")

-class MPCStatusBar(StatusBar):
+class MPCStatusBar(IAccessible):
+
+ def _get_firstChild(self):
+ return None
+
+ def _get_lastChild(self):
+ return None
+
+ def _get_children(self):
+ return []

def _get_role(self):
return controlTypes.ROLE_STATUSBAR

def _get_value(self):
- oldValue=super(StatusBar,self)._get_value()
- valueFromChildren=" ".join([" ".join([y for y in (x.name,x.value) if y and not y.isspace()]) for x in super(StatusBar,self)._get_children() if x.role == controlTypes.ROLE_GRAPHIC])
+ oldValue=super(MPCStatusBar,self)._get_value()
+ valueFromChildren=" ".join([" ".join([y for y in (x.name,x.value) if y and not y.isspace()]) for x in super(MPCStatusBar,self)._get_children() if x.role == controlTypes.ROLE_GRAPHIC])
if valueFromChildren:
return valueFromChildren
else:
return oldValue
-

commit r1878 - trunk/source/locale/es_ES/LC_MESSAGES

NVDA Subversion <svn@...>
 

Author: pvagner
Date: Thu Apr 3 07:43:11 2008
New Revision: 1878

Log:
* updated spanish language file

Modified:
trunk/source/locale/es_ES/LC_MESSAGES/nvda.po

Modified: trunk/source/locale/es_ES/LC_MESSAGES/nvda.po
==============================================================================
--- trunk/source/locale/es_ES/LC_MESSAGES/nvda.po (original)
+++ trunk/source/locale/es_ES/LC_MESSAGES/nvda.po Thu Apr 3 07:43:11 2008
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: r1849\n"
"POT-Creation-Date: 2007-03-18 21:51+Hora oficial de España\n"
-"PO-Revision-Date: 2008-03-25 19:04+0100\n"
+"PO-Revision-Date: 2008-04-02 23:32+0100\n"
"Last-Translator: Juan C. Buño <quetzatl@...11...>\n"
"Language-Team: equipo de traducción al español en Tifloclub <tifloclub@...12...>\n"
"MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@
msgstr "nivel %s"

#: NVDAObjects\IAccessible\__init__.py:69
-#: NVDAObjects\IAccessible\__init__.py:420
+#: NVDAObjects\IAccessible\__init__.py:428
#: NVDAObjects\IAccessible\sysListView32.py:89
msgid "%s of %s"
msgstr "%s de %s"
@@ -58,22 +58,22 @@

#: NVDAObjects\IAccessible\excel.py:103
#: controlTypes.py:291
-#: textBuffer.py:265
-#: textBuffer.py:317
+#: textBuffer.py:266
+#: textBuffer.py:318
msgid "bold"
msgstr "negrita"

#: NVDAObjects\IAccessible\excel.py:105
-#: textBuffer.py:272
-#: textBuffer.py:319
+#: textBuffer.py:273
+#: textBuffer.py:320
msgid "italic"
msgstr "cursiva"

#: NVDAObjects\IAccessible\excel.py:107
#: characterSymbols.py:50
#: controlTypes.py:293
-#: textBuffer.py:279
-#: textBuffer.py:321
+#: textBuffer.py:280
+#: textBuffer.py:322
msgid "underline"
msgstr "subrayado"

@@ -141,53 +141,6 @@
msgid "variant"
msgstr "variante"

-#: api.py:183
-#: api.py:186
-msgid "virtual buffer pass through"
-msgstr "Pasando por el modo virtual"
-
-#: api.py:183
-#: appModules\_default.py:45
-#: appModules\_default.py:120
-#: appModules\_default.py:130
-#: appModules\_default.py:140
-#: appModules\_default.py:150
-#: appModules\_default.py:521
-#: appModules\_default.py:603
-#: appModules\_default.py:645
-#: appModules\_default.py:655
-#: appModules\_default.py:665
-#: appModules\_default.py:675
-#: keyboardHandler.py:53
-#: keyboardHandler.py:55
-#: keyboardHandler.py:57
-#: speech.py:356
-#: speech.py:362
-#: virtualBuffers\__init__.py:199
-#: virtualBuffers_new\__init__.py:169
-msgid "off"
-msgstr "desactivado"
-
-#: api.py:186
-#: appModules\_default.py:42
-#: appModules\_default.py:123
-#: appModules\_default.py:133
-#: appModules\_default.py:143
-#: appModules\_default.py:153
-#: appModules\_default.py:606
-#: appModules\_default.py:648
-#: appModules\_default.py:658
-#: appModules\_default.py:668
-#: appModules\_default.py:678
-#: keyboardHandler.py:53
-#: keyboardHandler.py:55
-#: keyboardHandler.py:57
-#: speech.py:351
-#: virtualBuffers\__init__.py:199
-#: virtualBuffers_new\__init__.py:169
-msgid "on"
-msgstr "activado"
-
#: appModuleHandler.py:228
msgid "Error in appModule %s"
msgstr "Error en módulo app %s"
@@ -200,517 +153,559 @@
msgid "Could not load default module "
msgstr "no se pudo cargar el módulo predeterminado"

-#: appModules\_default.py:47
+#: appModules\_default.py:50
+#: appModules\_default.py:131
+#: appModules\_default.py:141
+#: appModules\_default.py:151
+#: appModules\_default.py:161
+#: appModules\_default.py:618
+#: appModules\_default.py:666
+#: appModules\_default.py:676
+#: appModules\_default.py:686
+#: appModules\_default.py:696
+#: keyboardHandler.py:53
+#: keyboardHandler.py:55
+#: keyboardHandler.py:57
+#: speech.py:351
+#: virtualBufferHandler.py:78
+#: virtualBuffers\__init__.py:201
+#: virtualBuffers_new\__init__.py:169
+msgid "on"
+msgstr "activado"
+
+#: appModules\_default.py:53
+#: appModules\_default.py:128
+#: appModules\_default.py:138
+#: appModules\_default.py:148
+#: appModules\_default.py:158
+#: appModules\_default.py:529
+#: appModules\_default.py:615
+#: appModules\_default.py:663
+#: appModules\_default.py:673
+#: appModules\_default.py:683
+#: appModules\_default.py:693
+#: keyboardHandler.py:53
+#: keyboardHandler.py:55
+#: keyboardHandler.py:57
+#: speech.py:356
+#: speech.py:362
+#: virtualBufferHandler.py:78
+#: virtualBuffers\__init__.py:201
+#: virtualBuffers_new\__init__.py:169
+msgid "off"
+msgstr "desactivado"
+
+#: appModules\_default.py:55
msgid "keyboard help %s"
msgstr "ayuda de teclado %s"

-#: appModules\_default.py:48
+#: appModules\_default.py:56
msgid "Turns keyboard help on and off. When on, pressing a key on the keyboard will tell you what script is associated with it, if any."
msgstr "Activa y desactiva la ayuda de teclado. Cuando se activa, presionando una tecla en el teclado se te dirá qué script está asociado con ella, si hay alguno."

-#: appModules\_default.py:72
-#: cursorManager.py:225
+#: appModules\_default.py:80
+#: cursorManager.py:226
msgid "no selection"
msgstr "Sin selección"

-#: appModules\_default.py:74
+#: appModules\_default.py:82
#: speech.py:263
#: speech.py:407
-#: textBuffer.py:536
-#: textBuffer.py:540
-#: textBuffer.py:542
-#: textBuffer.py:548
+#: textBuffer.py:537
+#: textBuffer.py:541
+#: textBuffer.py:543
+#: textBuffer.py:549
msgid "selected %s"
msgstr "seleccionado %s"

-#: appModules\_default.py:82
+#: appModules\_default.py:90
msgid "Reports the current date and time"
msgstr "Anuncia la fecha y hora actuales"

-#: appModules\_default.py:88
-#: appModules\_default.py:95
+#: appModules\_default.py:96
+#: appModules\_default.py:103
msgid "rate %d%%"
msgstr "velocidad %d%%"

-#: appModules\_default.py:89
+#: appModules\_default.py:97
msgid "Increases the speech rate by 5 percent"
msgstr "Incrementa la velocidad de la voz en un 5 porciento"

-#: appModules\_default.py:96
+#: appModules\_default.py:104
msgid "decreases the speech rate by 5 percent"
msgstr "decrementa la velocidad de la voz en un 5 porciento"

-#: appModules\_default.py:101
+#: appModules\_default.py:109
msgid "Increases currently active setting in the synth settings ring"
msgstr "Incrementa la opción actualmente activa en el grupo de opciones del sintetizador"

-#: appModules\_default.py:106
+#: appModules\_default.py:114
msgid "Decreases currently active setting in the synth settings ring"
msgstr "Decrementa la opción actualmente activa en el grupo de opciones del sintetizador"

-#: appModules\_default.py:111
+#: appModules\_default.py:119
msgid "Moves to the next available setting in the synth settings ring"
msgstr "Se mueve a la siguiente opción disponible en el grupo de opciones del sintetizador"

-#: appModules\_default.py:116
+#: appModules\_default.py:124
msgid "Moves to the previous available setting in the synth settings ring"
msgstr "Se mueve a la opción anterior disponible en el grupo de opciones del sintetizador"

-#: appModules\_default.py:125
+#: appModules\_default.py:133
msgid "speak typed characters"
-msgstr "verbalizar carácteres al escribir"
+msgstr "verbalizar caracteres al escribir"

-#: appModules\_default.py:126
+#: appModules\_default.py:134
msgid "Toggles on and off the speaking of typed characters"
-msgstr "Activa y desactiva la verbalización de los carácteres al escribir"
+msgstr "Activa y desactiva la verbalización de los caracteres al escribir"

-#: appModules\_default.py:135
+#: appModules\_default.py:143
msgid "speak typed words"
msgstr "verbalizar palabras al escribir"

-#: appModules\_default.py:136
+#: appModules\_default.py:144
msgid "Toggles on and off the speaking of typed words"
msgstr "Activa y desactiva la verbalización de palabras al escribir"

-#: appModules\_default.py:145
+#: appModules\_default.py:153
msgid "speak command keys"
msgstr "verbalizar teclas de comando"

-#: appModules\_default.py:146
+#: appModules\_default.py:154
msgid "Toggles on and off the speaking of typed keys, that are not specifically characters"
msgstr "Activa y desactiva la verbalización de teclas al escribir, las cuales no son carácteres específicamente"

-#: appModules\_default.py:155
+#: appModules\_default.py:163
msgid "speak punctuation"
msgstr "decir la puntuación"

-#: appModules\_default.py:156
+#: appModules\_default.py:164
msgid "Toggles on and off the speaking of punctuation. When on NVDA will say the names of punctuation symbols, when off it will be up to the synthesizer as to how it speaks punctuation"
msgstr "Activa o desactiva la verbalización de la puntuación. Cuando esté activadaNVDA dirá los nombres de los signos de puntuación, cuando esté desactivada será cosa del sintetizador cómo decirlos."

-#: appModules\_default.py:159
+#: appModules\_default.py:167
msgid "Move mouse to navigator"
msgstr "Mover el ratón al navegador"

-#: appModules\_default.py:164
+#: appModules\_default.py:172
msgid "object has no location"
msgstr "el objeto no tiene posición"

-#: appModules\_default.py:167
+#: appModules\_default.py:175
msgid "Moves the mouse pointer to the current navigator object."
-msgstr "Mueve el puntero del ratón al objeto actual en el navegador."
+msgstr "Mueve el puntero del ratón al actual navegador de objetos."

-#: appModules\_default.py:170
+#: appModules\_default.py:178
msgid "Move navigator object to mouse"
msgstr "Mover el navegador de objetos al ratón"

-#: appModules\_default.py:179
-#: appModules\_default.py:209
-#: appModules\_default.py:229
-#: appModules\_default.py:242
-#: appModules\_default.py:255
-#: appModules\_default.py:268
-#: appModules\_default.py:281
-#: appModules\_default.py:304
-#: appModules\_default.py:327
-#: appModules\_default.py:336
-#: appModules\_default.py:627
+#: appModules\_default.py:187
+#: appModules\_default.py:217
+#: appModules\_default.py:237
+#: appModules\_default.py:250
+#: appModules\_default.py:263
+#: appModules\_default.py:276
+#: appModules\_default.py:289
+#: appModules\_default.py:312
+#: appModules\_default.py:335
+#: appModules\_default.py:344
+#: appModules\_default.py:645
msgid "no navigator object"
-msgstr "no hay objetos para el navegador"
+msgstr "no hay navegador de objetos"

-#: appModules\_default.py:200
+#: appModules\_default.py:208
msgid "%s copied to clipboard"
msgstr "%s copiado al portapapeles"

-#: appModules\_default.py:204
+#: appModules\_default.py:212
msgid "Reports the current navigator object or, if pressed three times, Copies name and value of current navigator object to the clipboard"
msgstr "Anuncia el navegador de objetos actual o, si se presiona tres veces, Copia el nombre y el valor del actual navegador de objetos al portapapeles"

-#: appModules\_default.py:212
+#: appModules\_default.py:220
msgid "No location information for navigator object"
msgstr "no hay información de posición para el navegador de objetos"

-#: appModules\_default.py:214
+#: appModules\_default.py:222
msgid "%d wide by %d high, located %d from left and %d from top"
msgstr "%d de ancho por %d de alto, a %d de la izquierda y %d de arriba"

-#: appModules\_default.py:215
+#: appModules\_default.py:223
msgid "Reports the hight, width and position of the current navigator object"
-msgstr "Anuncia la altura, anchura y posición del actual objeto del navegador"
+msgstr "Anuncia la altura, anchura y posición del actual navegador de objetos"

-#: appModules\_default.py:220
-#: appModules\_default.py:585
+#: appModules\_default.py:228
+#: appModules\_default.py:597
msgid "no focus"
msgstr "sin foco"

-#: appModules\_default.py:222
+#: appModules\_default.py:230
msgid "move to focus"
-msgstr "moverse al foco"
+msgstr "se mueve al foco"

-#: appModules\_default.py:224
+#: appModules\_default.py:232
msgid "Sets the navigator object to the current focus"
-msgstr "Pone el objeto del navegador en el foco actual"
+msgstr "Pone el navegador de objetos en el foco actual"

-#: appModules\_default.py:236
+#: appModules\_default.py:244
msgid "No parents"
msgstr "sin padres"

-#: appModules\_default.py:237
+#: appModules\_default.py:245
msgid "Sets the navigator object to the parent of the object it is currently on."
-msgstr "Pone el navegador de objetos en el padre del objeto si está actualmente activado."
+msgstr "Pone el navegador de objetos en el padre del objeto del que se esté actualmente."

-#: appModules\_default.py:249
+#: appModules\_default.py:257
msgid "No next"
msgstr "último"

-#: appModules\_default.py:250
+#: appModules\_default.py:258
msgid "Sets the navigator object to the next object to the one it is currently on"
msgstr "Pone el navegador de objetos en el siguiente objeto del que se esté actualmente."

-#: appModules\_default.py:262
+#: appModules\_default.py:270
msgid "No previous"
msgstr "primero"

-#: appModules\_default.py:263
+#: appModules\_default.py:271
msgid "Sets the navigator object to the previous object to the one it is currently on"
msgstr "Pone el navegador de objetos en el objeto anterior del que se esté actualmente."

-#: appModules\_default.py:275
+#: appModules\_default.py:283
msgid "No children"
msgstr "sin hijos"

-#: appModules\_default.py:276
+#: appModules\_default.py:284
msgid "Sets the navigator object to the first child object to the one it is currently on"
msgstr "Pone el navegador de objetos en el primer objeto hijo del que se esté actualmente"

-#: appModules\_default.py:298
+#: appModules\_default.py:306
msgid "end of flow"
msgstr "fin de flujo"

-#: appModules\_default.py:299
+#: appModules\_default.py:307
msgid "Sets the navigator object to the object this object flows to."
msgstr "Pone el navegador de objetos en el objeto hacia el que este objeto fluye."

-#: appModules\_default.py:321
+#: appModules\_default.py:329
msgid "Beginning of flow"
msgstr "Comienzo del flujo"

-#: appModules\_default.py:322
+#: appModules\_default.py:330
msgid "Sets the navigator object to the object this object flows from."
msgstr "Pone el navegador de objetos en el objeto desde el que este objeto fluye."

-#: appModules\_default.py:330
+#: appModules\_default.py:338
msgid "Performs the default action on the current navigator object (example: presses it if it is a button)."
-msgstr "Lleva a cabo la acción predeterminada en el objeto actual en el navegador (ejemplo: presionar si es un botón)."
+msgstr "Lleva a cabo la acción predeterminada en el navegador de objetos actual (ejemplo: presionar si es un botón)."

-#: appModules\_default.py:341
+#: appModules\_default.py:349
msgid "inside"
msgstr "dentro de"

-#: appModules\_default.py:344
+#: appModules\_default.py:352
msgid "Reports where the current navigator object is by reporting each of its ancestors"
-msgstr "Anuncia dónde está el actual objeto en el navegador anunciando cada uno de sus ancestros"
+msgstr "Anuncia dónde está el actual navegador de objetos diciendo cada uno de sus ancestros"

-#: appModules\_default.py:350
-#: appModules\_default.py:362
-#: appModules\_default.py:404
-#: textBuffer.py:363
-#: textBuffer.py:390
-#: textBuffer.py:411
-#: textBuffer.py:432
-#: virtualBuffers_old\__init__.py:269
+#: appModules\_default.py:358
+#: appModules\_default.py:370
+#: appModules\_default.py:412
+#: textBuffer.py:364
+#: textBuffer.py:391
+#: textBuffer.py:412
+#: textBuffer.py:433
+#: virtualBuffers_old\__init__.py:270
msgid "top"
msgstr "inicio"

-#: appModules\_default.py:352
+#: appModules\_default.py:360
msgid "Moves the review cursor to the top line of the current navigator object"
-msgstr "Mueve el cursor de revisión a la línea superior del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión a la línea superior del navegador de objetos actual"

-#: appModules\_default.py:364
+#: appModules\_default.py:372
msgid "Moves the review cursor to the previous line of the current navigator object"
-msgstr "Mueve el cursor de revisión a la línea anterior del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión a la línea anterior del navegador de objetos actual"

-#: appModules\_default.py:374
+#: appModules\_default.py:382
msgid "Reports the line of the current navigator object where the review cursor is situated"
-msgstr "Anuncia la línea del objeto actual en el navegador donde esté situado el cursor de revisión"
+msgstr "Anuncia la línea actual del navegador de objetos donde esté situado el cursor de revisión"

-#: appModules\_default.py:384
#: appModules\_default.py:392
-#: appModules\_default.py:426
-#: textBuffer.py:368
-#: textBuffer.py:381
-#: textBuffer.py:402
-#: textBuffer.py:423
-#: virtualBuffers_old\__init__.py:284
+#: appModules\_default.py:400
+#: appModules\_default.py:434
+#: textBuffer.py:369
+#: textBuffer.py:382
+#: textBuffer.py:403
+#: textBuffer.py:424
+#: virtualBuffers_old\__init__.py:285
msgid "bottom"
msgstr "fin"

-#: appModules\_default.py:386
+#: appModules\_default.py:394
msgid "Moves the review cursor to the next line of the current navigator object"
-msgstr "Mueve el cursor de revisión a la siguiente línea del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión a la siguiente línea del navegador de objetos actual"

-#: appModules\_default.py:394
+#: appModules\_default.py:402
msgid "Moves the review cursor to the bottom line of the current navigator object"
-msgstr "Mueve el cursor de revisión a la última línea del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión a la última línea del navegador de objetos actual"

-#: appModules\_default.py:406
+#: appModules\_default.py:414
msgid "Moves the review cursor to the previous word of the current navigator object"
-msgstr "Mueve el cursor de revisión a la palabra anterior del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión a la palabra anterior del navegador de objetos actual"

-#: appModules\_default.py:416
+#: appModules\_default.py:424
msgid "Speaks the word of the current navigator object where the review cursor is situated"
-msgstr "Verbaliza la palabra del objeto actual en el navegador donde el cursór de revisión esté situado"
+msgstr "Verbaliza la palabra actual del navegador de objetos donde el cursór de revisión esté situado"

-#: appModules\_default.py:428
+#: appModules\_default.py:436
msgid "Moves the review cursor to the next word of the current navigator object"
-msgstr "Mueve el cursor de revisión a la siguiente palabra del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión a la siguiente palabra del navegador de objetos actual"

-#: appModules\_default.py:436
-#: appModules\_default.py:448
+#: appModules\_default.py:444
+#: appModules\_default.py:456
msgid "left"
msgstr "izquierda"

-#: appModules\_default.py:438
+#: appModules\_default.py:446
msgid "Moves the review cursor to the start of the line where it is situated, in the current navigator object"
-msgstr "Mueve el cursor de revisión al comienzo de la línea donde se esté situado, en el objeto actual del navegador"
+msgstr "Mueve el cursor de revisión al comienzo de la línea donde se esté situado, en el actual navegador de objetos"

-#: appModules\_default.py:456
+#: appModules\_default.py:464
msgid "Moves the review cursor to the previous character of the current navigator object"
-msgstr "Mueve el cursor de revisión al carácter anterior del objeto en el navegador"
+msgstr "Mueve el cursor de revisión al carácter anterior del navegador de objetos actual"

-#: appModules\_default.py:471
+#: appModules\_default.py:479
msgid "Reports the character of the current navigator object where the review cursor is situated"
-msgstr "Anuncia el carácter del objeto actual en el navegador donde el cursor de revisión esté situado"
+msgstr "Anuncia el carácter actual del navegador de objetos donde el cursor de revisión esté situado"

-#: appModules\_default.py:481
-#: appModules\_default.py:498
+#: appModules\_default.py:489
+#: appModules\_default.py:506
msgid "right"
msgstr "derecha"

-#: appModules\_default.py:489
+#: appModules\_default.py:497
msgid "Moves the review cursor to the next character of the current navigator object"
-msgstr "Mueve el cursor de revisión al siguiente carácter del objeto actual en el navegador"
+msgstr "Mueve el cursor de revisión al siguiente carácter del actual navegador de objetos"

-#: appModules\_default.py:500
+#: appModules\_default.py:508
msgid "Moves the review cursor to the end of the line where it is situated, in the current navigator object"
-msgstr "Mueve el cursor de revisión al final de la línea donde se esté situado, en el objeto actual del navegador"
+msgstr "Mueve el cursor de revisión al final de la línea donde se esté situado, en el actual navegador de objetos"

-#: appModules\_default.py:507
+#: appModules\_default.py:515
msgid "Moves the review cursor to the position of the system caret, in the current navigator object"
-msgstr "Mueve el cursor de revisión a la posición del cursor del sistema, en el objeto actual del navegador"
+msgstr "Mueve el cursor de revisión a la posición del cursor del sistema, en el actual navegador de objetos"

-#: appModules\_default.py:514
+#: appModules\_default.py:522
msgid "Moves the system caret to the position of the review cursor , in the current navigator object"
-msgstr "Mueve el cursor del sistema a la posición del cursor de revisión, en el objeto actual del navegador"
+msgstr "Mueve el cursor del sistema a la posición del cursor de revisión, en el actual navegador de objetos"

-#: appModules\_default.py:523
+#: appModules\_default.py:531
msgid "beeps"
msgstr "Pitidos"

-#: appModules\_default.py:525
+#: appModules\_default.py:533
msgid "talk"
msgstr "hablar"

-#: appModules\_default.py:527
+#: appModules\_default.py:535
msgid "speech mode %s"
msgstr "modo de voz %s"

-#: appModules\_default.py:529
+#: appModules\_default.py:537
msgid "Toggles between the speech modes of off, beep and talk. When set to off NVDA will not speak anything. If beeps then NVDA will simply beep each time it its supposed to speak something. If talk then NVDA wil just speak normally."
msgstr "Cambia entre los modos de voz a desactivado, pitidos y hablar. Cuando se pone en desactivado NVDA no verbalizará nada. Si se pone en pitidos entonces NVDA simplemente pitará cada vez que se debiera hablar algo. Si se selecciona hablar entonces NVDA hablará normalmente."

-#: appModules\_default.py:533
+#: appModules\_default.py:545
msgid "Toggles virtualBuffer pass-through mode on and off. When on, keys will pass straight through the current virtualBuffer, allowing you to interact with a control without the virtualBuffer doing something else with the key."
msgstr "Activa o desactiva el paso a través del modo virtual. Cuando está activado, las teclas pasarán directamente a través del formulario virtual actual, permitiéndote interactuar con un control sin que el formulario virtual haga nada indebido con la tecla."

-#: appModules\_default.py:537
+#: appModules\_default.py:549
msgid "Quits NVDA!"
-msgstr "¡sale del NVDA¡"
+msgstr "¡sale del NVDA!"

-#: appModules\_default.py:541
+#: appModules\_default.py:553
msgid "Shows the NVDA interface window"
msgstr "Muestra la ventana de la interface de NVDA"

-#: appModules\_default.py:546
+#: appModules\_default.py:558
msgid "reads from review cursor up to end of current text, moving the review cursor as it goes"
msgstr "lee desde encima del cursor de revisión hasta el final del texto actual, moviendo el cursor de revisión a la vez"

-#: appModules\_default.py:551
+#: appModules\_default.py:563
msgid "reads from navigator object "
msgstr "lee desde el navegador de objetos"

-#: appModules\_default.py:563
+#: appModules\_default.py:575
msgid "reads from system caret up to end of text, moving the caret as it goes"
msgstr "lee desde encima del cursor del sistema hasta el fin de texto, moviendo el cursor a la vez"

-#: appModules\_default.py:586
+#: appModules\_default.py:598
msgid "reports the object with focus"
-msgstr "Anuncia las teclas de atajo de los objetos"
+msgstr "anuncia el objeto con el foco"

-#: appModules\_default.py:592
+#: appModules\_default.py:604
#: appModules\mplayerc.py:30
msgid "no status bar found"
-msgstr "barra de status no encontrada"
+msgstr "barra de estado no encontrada"

-#: appModules\_default.py:599
+#: appModules\_default.py:611
#: appModules\mplayerc.py:37
msgid "reads the current aplication status bar and moves the navigation cursor to it"
-msgstr "lee la barra de estado de la aplicación actual y mueve el cursor de navegación a ella"
+msgstr "lee la barra de estado de la aplicación actual y mueve el cursor de navegación hacia ella"

-#: appModules\_default.py:608
+#: appModules\_default.py:620
msgid "Report object under mouse"
msgstr "anunciar objeto bajo el ratón"

-#: appModules\_default.py:609
+#: appModules\_default.py:621
msgid "Toggles on and off the reporting of objects under the mouse"
msgstr "Activa y desactiva el anunciado de objetos bajo el ratón"

-#: appModules\_default.py:615
+#: appModules\_default.py:627
msgid "Reports the title of the current application or foreground window"
msgstr "Anuncia el título de la aplicación actual o de la ventana en primer plano"

-#: appModules\_default.py:622
+#: appModules\_default.py:634
msgid "speaks the current foreground object"
msgstr "Verbaliza el objeto actual en primer plano"

-#: appModules\_default.py:631
-#: cursorManager.py:242
+#: appModules\_default.py:649
+#: cursorManager.py:243
msgid "copied to clipboard"
msgstr "copiado al portapapeles"

-#: appModules\_default.py:635
+#: appModules\_default.py:653
msgid "Control ID: %s"
msgstr "Identificador del Control: %s"

-#: appModules\_default.py:636
+#: appModules\_default.py:654
msgid "Class: %s"
msgstr "Clase: %s"

-#: appModules\_default.py:638
+#: appModules\_default.py:656
msgid "internal text: %s"
msgstr "texto interno: %s"

-#: appModules\_default.py:639
+#: appModules\_default.py:657
msgid "text: %s"
msgstr "texto: %s"

-#: appModules\_default.py:641
+#: appModules\_default.py:659
msgid "reports some info about the current navigator object, mainly useful for developers. When pressed 2 times it copies control id, class and internal text to the windows clipboard"
-msgstr "anuncia cierta información acerca del actual objeto del navegador, principalmente útil para desarrolladores. Cuando se presiona 2 veces copia el ID del control, la clase y texto interno al portapapeles de windows"
+msgstr "anuncia cierta información acerca del actual navegador de objetos, principalmente útil para desarrolladores. Cuando se presiona 2 veces copia el ID del control, la clase y texto interno al portapapeles de windows"

-#: appModules\_default.py:650
+#: appModules\_default.py:668
msgid "Beep on progress bar updates"
msgstr "pitar en barras de progresso"

-#: appModules\_default.py:651
+#: appModules\_default.py:669
msgid "Toggles on and off the beeping on progress bar updates"
msgstr "Activa y desactiva los pitidos en las barras de progresso"

-#: appModules\_default.py:660
+#: appModules\_default.py:678
msgid "report dynamic content changes"
msgstr "Anunciar cambios en el contenido dinámico "

-#: appModules\_default.py:661
+#: appModules\_default.py:679
msgid "Toggles on and off the reporting of dynamic content changes, such as new text in dos console windows"
msgstr "Activa y desactiva el anunciado de los cambios de contenido dinámico, tales como texto nuevo en la consola dos de windows"

-#: appModules\_default.py:670
+#: appModules\_default.py:688
msgid "caret moves review cursor"
msgstr "el cursor del sistema mueve al cursor de revisión"

-#: appModules\_default.py:671
+#: appModules\_default.py:689
msgid "Toggles on and off the movement of the review cursor due to the caret moving."
msgstr "Activa y desactiva el movimiento del cursor de revisión debido al movimiento del cursor del sistema"

-#: appModules\_default.py:680
+#: appModules\_default.py:698
msgid "focus moves navigator object"
-msgstr "el foco se mueve al objeto del navegador"
+msgstr "el foco mueve el navegador de objetos"

-#: appModules\_default.py:681
+#: appModules\_default.py:699
msgid "Toggles on and off the movement of the navigator object due to focus changes"
-msgstr "Activa y desactiva el movimiento del objeto del navegador debido a cambios del foco"
+msgstr "Activa y desactiva el movimiento del navegador de objetos debido a cambios del foco"

-#: appModules\_default.py:693
+#: appModules\_default.py:711
msgid "no system battery"
msgstr "no hay batería del sistema"

-#: appModules\_default.py:695
+#: appModules\_default.py:713
msgid "%d percent"
msgstr "%d porciento"

-#: appModules\_default.py:696
+#: appModules\_default.py:714
msgid "AC power on"
msgstr "fuente externa de alimentación activada"

-#: appModules\_default.py:698
+#: appModules\_default.py:716
msgid "%d hours and %d minutes remaining"
msgstr "%d horas y %d minutos restantes"

-#: appModules\_default.py:700
+#: appModules\_default.py:718
msgid "reports battery status and time remaining if AC is not plugged in"
msgstr "anuncia el estado de las baterías y el tiempo restante si la fuente externa de alimentación no está enchufada"

-#: appModules\_default.py:704
+#: appModules\_default.py:722
msgid "Pass next key through"
msgstr "Dejar pasar la siguiente tecla"

-#: appModules\_default.py:705
+#: appModules\_default.py:723
msgid "The next key that is pressed will not be handled at all by NVDA, it will be passed directly through to Windows."
msgstr "La siguiente tecla que sea presionada no será manipulada por NVDA, será dejada pasar directamente a Windows."

-#: appModules\_default.py:709
+#: appModules\_default.py:727
msgid "Currently running application is %s."
msgstr "La aplicación en ejecución actualmente es %s."

-#: appModules\_default.py:714
+#: appModules\_default.py:732
msgid "default module"
msgstr "módulo predeterminado"

-#: appModules\_default.py:715
+#: appModules\_default.py:733
msgid "and currently loaded module is %s"
msgstr "y el módulo actualmente cargado es %s"

-#: appModules\_default.py:716
+#: appModules\_default.py:734
msgid "Speaks filename of the active application along with name of the currently loaded appmodule"
msgstr "Verbaliza el nombre de fichero de la aplicación activa junto con el nombre del appmodule actualmente cargado"

-#: appModules\_default.py:720
+#: appModules\_default.py:738
msgid "Shows NVDA general settings dialog"
msgstr "Muestra el diálogo Opciones Generales de NVDA"

-#: appModules\_default.py:724
+#: appModules\_default.py:742
msgid "Shows NVDA synthesizer dialog"
msgstr "Muestra el diálogo Sintetizadores de NVDA"

-#: appModules\_default.py:728
+#: appModules\_default.py:746
msgid "Shows NVDA voice settings dialog"
msgstr "Muestra el diálogo Opciones de Voz de NVDA"

-#: appModules\_default.py:732
+#: appModules\_default.py:750
msgid "Shows NVDA keyboard settings dialog"
msgstr "Muestra el diálogo Opciones de Teclado de NVDA"

-#: appModules\_default.py:736
+#: appModules\_default.py:754
msgid "Shows NVDA mouse settings dialog"
msgstr "Muestra el diálogo Opciones del Ratón de NVDA"

-#: appModules\_default.py:740
+#: appModules\_default.py:758
msgid "Shows NVDA object presentation settings dialog"
msgstr "Muestra el diálogo Presentación de Objetos de NVDA"

-#: appModules\_default.py:744
+#: appModules\_default.py:762
msgid "Shows NVDA virtual buffers settings dialog"
msgstr "Muestra el diálogo Opciones del Modo virtual de NVDA"

-#: appModules\_default.py:748
+#: appModules\_default.py:766
msgid "Shows NVDA document formatting settings dialog"
msgstr "Muestra el diálogo Formateado de documentos de NVDA"

-#: appModules\_default.py:753
+#: appModules\_default.py:771
msgid "Saves current NVDA configuration to file"
msgstr "Guarda la configuración actual de NVDA al fichero"

-#: appModules\_default.py:757
+#: appModules\_default.py:775
msgid "loads NVDA configuration from file, overriding current changes"
msgstr "Carga la configuración de NVDA desde el fichero, no haciendo caso de los cambios actuales"

@@ -949,12 +944,12 @@
#: virtualBuffers\gecko.py:256
#: virtualBuffers\gecko.py:267
#: virtualBuffers_new\__init__.py:77
-#: virtualBuffers_old\MSHTML.py:253
-#: virtualBuffers_old\MSHTML.py:260
-#: virtualBuffers_old\adobe.py:263
-#: virtualBuffers_old\adobe.py:274
-#: virtualBuffers_old\gecko.py:256
-#: virtualBuffers_old\gecko.py:267
+#: virtualBuffers_old\MSHTML.py:257
+#: virtualBuffers_old\MSHTML.py:264
+#: virtualBuffers_old\adobe.py:266
+#: virtualBuffers_old\adobe.py:277
+#: virtualBuffers_old\gecko.py:259
+#: virtualBuffers_old\gecko.py:270
msgid "bullet"
msgstr "viñeta"

@@ -1170,8 +1165,8 @@
#: controlTypes.py:217
#: virtualBuffers\adobe.py:37
#: virtualBuffers\gecko.py:42
-#: virtualBuffers_old\adobe.py:37
-#: virtualBuffers_old\gecko.py:42
+#: virtualBuffers_old\adobe.py:38
+#: virtualBuffers_old\gecko.py:43
msgid "document"
msgstr "documento"

@@ -1221,7 +1216,7 @@

#: controlTypes.py:229
msgid "embedded object"
-msgstr "objeto empotrado"
+msgstr "objeto incorporado"

#: controlTypes.py:230
msgid "end note"
@@ -1473,14 +1468,14 @@
msgstr "color de fondo"

#: controlTypes.py:296
-#: textBuffer.py:286
-#: textBuffer.py:293
-#: textBuffer.py:323
+#: textBuffer.py:287
+#: textBuffer.py:294
+#: textBuffer.py:324
msgid "superscript"
msgstr "superíndice"

#: controlTypes.py:297
-#: textBuffer.py:325
+#: textBuffer.py:326
msgid "subscript"
msgstr "subíndice"

@@ -1506,7 +1501,7 @@

#: controlTypes.py:308
msgid "busy"
-msgstr "ocupado"
+msgstr "procesando"

#: controlTypes.py:309
msgid "pressed"
@@ -1550,7 +1545,7 @@

#: controlTypes.py:319
#: virtualBuffers\MSHTML.py:295
-#: virtualBuffers_old\MSHTML.py:295
+#: virtualBuffers_old\MSHTML.py:299
msgid "protected"
msgstr "contraseña"

@@ -1602,30 +1597,30 @@
msgid "You can press insert+n to activate the NVDA menu at any time"
msgstr "Puedes presionar insert+n para activar el menú de NVDA en cualquier momento"

-#: cursorManager.py:77
-#: virtualBuffers_old\__init__.py:459
+#: cursorManager.py:78
+#: virtualBuffers_old\__init__.py:460
msgid "Find"
msgstr "buscar"

-#: cursorManager.py:77
-#: virtualBuffers_old\__init__.py:459
+#: cursorManager.py:78
+#: virtualBuffers_old\__init__.py:460
msgid "Type the text you wish to find"
msgstr "Teclea el texto que deseas encontrar"

-#: cursorManager.py:96
+#: cursorManager.py:97
msgid "text \"%s\" not found"
msgstr "texto \"%s\" no encontrado"

-#: cursorManager.py:96
-#: virtualBuffers_old\__init__.py:469
+#: cursorManager.py:97
+#: virtualBuffers_old\__init__.py:470
msgid "Find Error"
msgstr "Fallo en la búsqueda"

-#: cursorManager.py:103
+#: cursorManager.py:104
msgid "find a text string from the current cursor position"
msgstr "encontrar una cadena de texto desde la posición actual del cursor"

-#: cursorManager.py:110
+#: cursorManager.py:111
msgid "find the next occurrence of the previously entered text string from the current cursor's position"
msgstr "encontrar la siguiente ocurrencia de la cadena de texto introducida previamente desde la posición actual del cursor"

@@ -2250,9 +2245,9 @@
msgstr "fuera de"

#: speech.py:412
-#: textBuffer.py:544
-#: textBuffer.py:546
-#: textBuffer.py:550
+#: textBuffer.py:545
+#: textBuffer.py:547
+#: textBuffer.py:551
msgid "unselected %s"
msgstr "no seleccionado %s"

@@ -2264,13 +2259,13 @@
#: virtualBuffers\adobe.py:304
#: virtualBuffers\gecko.py:293
#: virtualBuffers\gecko.py:297
-#: virtualBuffers_old\MSHTML.py:123
-#: virtualBuffers_old\MSHTML.py:303
+#: virtualBuffers_old\MSHTML.py:125
#: virtualBuffers_old\MSHTML.py:307
-#: virtualBuffers_old\adobe.py:300
-#: virtualBuffers_old\adobe.py:304
-#: virtualBuffers_old\gecko.py:293
-#: virtualBuffers_old\gecko.py:297
+#: virtualBuffers_old\MSHTML.py:311
+#: virtualBuffers_old\adobe.py:303
+#: virtualBuffers_old\adobe.py:307
+#: virtualBuffers_old\gecko.py:296
+#: virtualBuffers_old\gecko.py:300
msgid "not %s"
msgstr "no %s"

@@ -2282,109 +2277,109 @@
msgid "No speech, a template synthesizer"
msgstr "Sin voz, plantilla de sintetizador"

-#: textBuffer.py:206
+#: textBuffer.py:207
msgid "page %d"
msgstr "página %d"

-#: textBuffer.py:212
+#: textBuffer.py:213
msgid "line %d"
msgstr "línea %d"

-#: textBuffer.py:218
+#: textBuffer.py:219
msgid "out of table"
msgstr "fuera de tabla"

-#: textBuffer.py:224
+#: textBuffer.py:225
msgid "table with %d columns and %d rows"
msgstr "tabla con %d columnas y %d filas"

-#: textBuffer.py:230
+#: textBuffer.py:231
msgid "row %d"
msgstr "fila %d"

-#: textBuffer.py:235
+#: textBuffer.py:236
msgid "column %d"
msgstr "columna %d"

-#: textBuffer.py:241
-#: textBuffer.py:309
+#: textBuffer.py:242
+#: textBuffer.py:310
msgid "style %s"
msgstr "estilo %s"

-#: textBuffer.py:247
-#: textBuffer.py:311
+#: textBuffer.py:248
+#: textBuffer.py:312
msgid "alignment %s"
msgstr "alineación %s"

-#: textBuffer.py:253
-#: textBuffer.py:313
+#: textBuffer.py:254
+#: textBuffer.py:314
msgid "font name %s"
msgstr "nombre de la fuente %s"

-#: textBuffer.py:259
-#: textBuffer.py:315
+#: textBuffer.py:260
+#: textBuffer.py:316
msgid "font size %d"
msgstr "tamaño de la fuente %d"

-#: textBuffer.py:267
+#: textBuffer.py:268
msgid "not bold"
msgstr "no hay negritas"

-#: textBuffer.py:274
+#: textBuffer.py:275
msgid "not italic"
msgstr "no hay cursivas"

-#: textBuffer.py:281
+#: textBuffer.py:282
msgid "not underline"
msgstr "no hay subrayado"

-#: textBuffer.py:288
+#: textBuffer.py:289
msgid "not superscript"
msgstr "no hay superíndice"

-#: textBuffer.py:295
+#: textBuffer.py:296
msgid "not subscript"
msgstr "no hay subíndice"

-#: textBuffer.py:469
-#: textBuffer.py:497
-#: textBuffer.py:505
+#: textBuffer.py:470
+#: textBuffer.py:498
+#: textBuffer.py:506
msgid "Moves and then reads the current line"
msgstr "Se mueve y luego lee la línea actual"

-#: textBuffer.py:473
+#: textBuffer.py:474
msgid "reads the current line"
msgstr "Lee la línea actual"

-#: textBuffer.py:481
+#: textBuffer.py:482
msgid "Moves and reads the current character"
msgstr "Se mueve y luego lee el carácter actual"

-#: textBuffer.py:489
+#: textBuffer.py:490
msgid "Moves and reads the current word"
msgstr "Se mueve y lee la palabra actual"

-#: textBuffer.py:513
+#: textBuffer.py:514
msgid "Manually moves to the next paragraph and then speaks it"
msgstr "Se mueve manualmente al siguiente párrafo y luego lo verbaliza"

-#: textBuffer.py:521
+#: textBuffer.py:522
msgid "Manually moves to the previous paragraph and then speaks it"
msgstr "Se mueve manualmente al párrafo anterior y luego lo verbaliza"

-#: textBuffer.py:533
+#: textBuffer.py:534
msgid "no selections"
msgstr "sin selección"

-#: textBuffer.py:552
+#: textBuffer.py:553
msgid "Moves and reads the current selection"
msgstr "Se mueve y lee la selección actual"

-#: textBuffer.py:558
+#: textBuffer.py:559
msgid "Deletes the character and reads the new current character"
msgstr "Elimina el carácter y lee el nuevo carácter actual"

-#: textBuffer.py:572
+#: textBuffer.py:573
msgid "Reads the character before the current character and then deletes it"
msgstr "Lee el carácter antes del carácter actual y luego lo elimina"

@@ -2410,40 +2405,44 @@
"http://www.gnu.org/licenses/gpl.html\n"
"O mirar el fichero Copying.txt que viene con este programa."

+#: virtualBufferHandler.py:78
+msgid "virtual buffer pass through"
+msgstr "Pasando por el modo virtual"
+
#: virtualBuffers\MSHTML.py:144
#: virtualBuffers\adobe.py:170
#: virtualBuffers\gecko.py:168
-#: virtualBuffers_old\MSHTML.py:144
-#: virtualBuffers_old\adobe.py:170
-#: virtualBuffers_old\gecko.py:168
+#: virtualBuffers_old\MSHTML.py:148
+#: virtualBuffers_old\adobe.py:173
+#: virtualBuffers_old\gecko.py:171
msgid "loading document %s"
msgstr "Cargando documento %s"

#: virtualBuffers\MSHTML.py:152
#: virtualBuffers\adobe.py:179
#: virtualBuffers\gecko.py:177
-#: virtualBuffers_old\MSHTML.py:152
-#: virtualBuffers_old\adobe.py:179
-#: virtualBuffers_old\gecko.py:177
+#: virtualBuffers_old\MSHTML.py:156
+#: virtualBuffers_old\adobe.py:182
+#: virtualBuffers_old\gecko.py:180
msgid "done"
msgstr "hecho"

#: virtualBuffers\MSHTML.py:247
#: virtualBuffers\MSHTML.py:250
#: virtualBuffers\MSHTML.py:257
-#: virtualBuffers\__init__.py:89
+#: virtualBuffers\__init__.py:91
#: virtualBuffers\adobe.py:257
#: virtualBuffers\adobe.py:268
#: virtualBuffers\gecko.py:250
#: virtualBuffers\gecko.py:261
#: virtualBuffers_new\__init__.py:71
-#: virtualBuffers_old\MSHTML.py:247
-#: virtualBuffers_old\MSHTML.py:250
-#: virtualBuffers_old\MSHTML.py:257
-#: virtualBuffers_old\adobe.py:257
-#: virtualBuffers_old\adobe.py:268
-#: virtualBuffers_old\gecko.py:250
-#: virtualBuffers_old\gecko.py:261
+#: virtualBuffers_old\MSHTML.py:251
+#: virtualBuffers_old\MSHTML.py:254
+#: virtualBuffers_old\MSHTML.py:261
+#: virtualBuffers_old\adobe.py:260
+#: virtualBuffers_old\adobe.py:271
+#: virtualBuffers_old\gecko.py:253
+#: virtualBuffers_old\gecko.py:264
msgid "with %s items"
msgstr "con %s elementos"

@@ -2453,182 +2452,182 @@
#: virtualBuffers\adobe.py:280
#: virtualBuffers\gecko.py:260
#: virtualBuffers\gecko.py:273
-#: virtualBuffers_old\MSHTML.py:256
-#: virtualBuffers_old\MSHTML.py:263
-#: virtualBuffers_old\adobe.py:267
-#: virtualBuffers_old\adobe.py:280
-#: virtualBuffers_old\gecko.py:260
-#: virtualBuffers_old\gecko.py:273
+#: virtualBuffers_old\MSHTML.py:260
+#: virtualBuffers_old\MSHTML.py:267
+#: virtualBuffers_old\adobe.py:270
+#: virtualBuffers_old\adobe.py:283
+#: virtualBuffers_old\gecko.py:263
+#: virtualBuffers_old\gecko.py:276
msgid "definition"
msgstr "definición"

#: virtualBuffers\MSHTML.py:291
-#: virtualBuffers_old\MSHTML.py:291
+#: virtualBuffers_old\MSHTML.py:295
msgid "file upload"
msgstr "subir fichero"

#: virtualBuffers\MSHTML.py:324
-#: virtualBuffers_old\MSHTML.py:325
+#: virtualBuffers_old\MSHTML.py:329
msgid "clickable"
msgstr "cliqueable"

-#: virtualBuffers\__init__.py:87
-#: virtualBuffers\__init__.py:91
-#: virtualBuffers\__init__.py:95
-#: virtualBuffers\__init__.py:101
-#: virtualBuffers\__init__.py:105
+#: virtualBuffers\__init__.py:89
+#: virtualBuffers\__init__.py:93
+#: virtualBuffers\__init__.py:97
+#: virtualBuffers\__init__.py:103
+#: virtualBuffers\__init__.py:107
#: virtualBuffers_new\__init__.py:73
#: virtualBuffers_new\__init__.py:81
#: virtualBuffers_new\__init__.py:85
-#: virtualBuffers_old\__init__.py:190
+#: virtualBuffers_old\__init__.py:191
msgid "out of %s"
msgstr "fuera de %s"

-#: virtualBuffers\__init__.py:103
+#: virtualBuffers\__init__.py:105
#: virtualBuffers_new\__init__.py:83
msgid "in %s"
msgstr "en %s"

-#: virtualBuffers\__init__.py:176
+#: virtualBuffers\__init__.py:178
#: virtualBuffers_new\__init__.py:155
-#: virtualBuffers_old\__init__.py:290
+#: virtualBuffers_old\__init__.py:291
msgid "activates the current object in the virtual buffer"
msgstr "activa el objeto actual en el formulario virtual"

-#: virtualBuffers\__init__.py:195
+#: virtualBuffers\__init__.py:197
msgid "Refreshed"
msgstr "Refrescado"

-#: virtualBuffers\__init__.py:200
+#: virtualBuffers\__init__.py:202
#: virtualBuffers_new\__init__.py:170
msgid "use screen layout %s"
msgstr "utilizar Disposición de pantalla %s"

-#: virtualBuffers\__init__.py:242
+#: virtualBuffers\__init__.py:244
#: virtualBuffers_new\__init__.py:194
msgid "no next heading"
msgstr "no hay siguiente encabezado"

-#: virtualBuffers\__init__.py:243
+#: virtualBuffers\__init__.py:245
#: virtualBuffers_new\__init__.py:195
-#: virtualBuffers_old\__init__.py:313
+#: virtualBuffers_old\__init__.py:314
msgid "moves to the next heading"
msgstr "se mueve al siguiente encabezado"

-#: virtualBuffers\__init__.py:249
+#: virtualBuffers\__init__.py:251
#: virtualBuffers_new\__init__.py:199
msgid "no previous heading"
msgstr "no hay anterior encabezado"

-#: virtualBuffers\__init__.py:250
+#: virtualBuffers\__init__.py:252
#: virtualBuffers_new\__init__.py:200
-#: virtualBuffers_old\__init__.py:324
+#: virtualBuffers_old\__init__.py:325
msgid "moves to the previous heading"
msgstr "se mueve al anterior encabezado"

-#: virtualBuffers\__init__.py:256
+#: virtualBuffers\__init__.py:258
msgid "no next table"
msgstr "no hay tabla siguiente"

-#: virtualBuffers\__init__.py:257
-#: virtualBuffers_old\__init__.py:357
+#: virtualBuffers\__init__.py:259
+#: virtualBuffers_old\__init__.py:358
msgid "moves to the next table"
msgstr "se mueve a la tabla siguiente "

-#: virtualBuffers\__init__.py:263
+#: virtualBuffers\__init__.py:265
msgid "no previous table"
msgstr "no hay tabla anterior"

-#: virtualBuffers\__init__.py:264
-#: virtualBuffers_old\__init__.py:368
+#: virtualBuffers\__init__.py:266
+#: virtualBuffers_old\__init__.py:369
msgid "moves to the previous table"
msgstr "se mueve a la tabla anterior "

-#: virtualBuffers\__init__.py:270
+#: virtualBuffers\__init__.py:272
#: virtualBuffers_new\__init__.py:204
msgid "no next link"
msgstr "no hay siguiente enlace"

-#: virtualBuffers\__init__.py:271
+#: virtualBuffers\__init__.py:273
#: virtualBuffers_new\__init__.py:205
-#: virtualBuffers_old\__init__.py:379
+#: virtualBuffers_old\__init__.py:380
msgid "moves to the next link"
msgstr "se mueve al enlace siguiente"

-#: virtualBuffers\__init__.py:277
+#: virtualBuffers\__init__.py:279
#: virtualBuffers_new\__init__.py:209
msgid "no previous link"
msgstr "no hay anterior enlace"

-#: virtualBuffers\__init__.py:278
+#: virtualBuffers\__init__.py:280
#: virtualBuffers_new\__init__.py:210
-#: virtualBuffers_old\__init__.py:390
+#: virtualBuffers_old\__init__.py:391
msgid "moves to the previous link"
msgstr "se mueve al enlace anterior"

-#: virtualBuffers\__init__.py:284
+#: virtualBuffers\__init__.py:286
#: virtualBuffers_new\__init__.py:214
msgid "no next visited link"
msgstr "no hay siguiente enlace visitado"

-#: virtualBuffers\__init__.py:285
+#: virtualBuffers\__init__.py:287
#: virtualBuffers_new\__init__.py:215
msgid "moves to the next visited link"
msgstr "se mueve al siguiente enlace visitado"

-#: virtualBuffers\__init__.py:291
+#: virtualBuffers\__init__.py:293
#: virtualBuffers_new\__init__.py:219
msgid "no previous visited link"
msgstr "no hay anterior enlace visitado"

-#: virtualBuffers\__init__.py:292
+#: virtualBuffers\__init__.py:294
#: virtualBuffers_new\__init__.py:220
msgid "moves to the previous visited link"
msgstr "se mueve al anterior enlace visitado"

-#: virtualBuffers\__init__.py:298
+#: virtualBuffers\__init__.py:300
#: virtualBuffers_new\__init__.py:224
msgid "no next unvisited link"
msgstr "no hay siguiente enlace sin visitar"

-#: virtualBuffers\__init__.py:299
+#: virtualBuffers\__init__.py:301
#: virtualBuffers_new\__init__.py:225
msgid "moves to the next unvisited link"
msgstr "se mueve al siguiente enlace sin visitar"

-#: virtualBuffers\__init__.py:305
+#: virtualBuffers\__init__.py:307
#: virtualBuffers_new\__init__.py:229
msgid "no previous unvisited link"
msgstr "no hay anterior enlace sin visitar"

-#: virtualBuffers\__init__.py:306
+#: virtualBuffers\__init__.py:308
#: virtualBuffers_new\__init__.py:230
msgid "moves to the previous unvisited link"
msgstr "se mueve al anterior enlace sin visitar"

-#: virtualBuffers\__init__.py:312
+#: virtualBuffers\__init__.py:314
#: virtualBuffers_new\__init__.py:234
msgid "no next form field"
msgstr "no hay siguiente campo de formulario"

-#: virtualBuffers\__init__.py:313
-#: virtualBuffers\__init__.py:320
+#: virtualBuffers\__init__.py:315
+#: virtualBuffers\__init__.py:322
#: virtualBuffers_new\__init__.py:235
#: virtualBuffers_new\__init__.py:240
msgid "moves to the next form field"
msgstr "se mueve al siguiente campo de formulario"

-#: virtualBuffers\__init__.py:319
+#: virtualBuffers\__init__.py:321
#: virtualBuffers_new\__init__.py:239
msgid "no previous form field"
msgstr "no hay anterior campo de formulario"

-#: virtualBuffers\__init__.py:355
+#: virtualBuffers\__init__.py:357
msgid "displays a list of links"
msgstr "muestra una lista de enlaces"

#: virtualBuffers\adobe.py:312
-#: virtualBuffers_old\adobe.py:312
+#: virtualBuffers_old\adobe.py:315
msgid "protected %s"
msgstr "contraseña %s"

@@ -2640,125 +2639,125 @@
msgid "Done"
msgstr "Echo"

-#: virtualBuffers_old\__init__.py:271
+#: virtualBuffers_old\__init__.py:272
msgid "moves one page up in the virtual buffer's current document"
msgstr "mueve una página arriba en el documento actual en el formulario virtual"

-#: virtualBuffers_old\__init__.py:286
+#: virtualBuffers_old\__init__.py:287
msgid "moves one page down in the virtual buffer's current document"
msgstr "mueve una página hacia abajo en el documento actual en el formulario virtual"

-#: virtualBuffers_old\__init__.py:312
-#: virtualBuffers_old\__init__.py:323
+#: virtualBuffers_old\__init__.py:313
+#: virtualBuffers_old\__init__.py:324
msgid "no more headings"
msgstr "sin más encabezados"

-#: virtualBuffers_old\__init__.py:334
-#: virtualBuffers_old\__init__.py:345
+#: virtualBuffers_old\__init__.py:335
+#: virtualBuffers_old\__init__.py:346
msgid "no more paragraphs"
msgstr "sin más párrafos"

-#: virtualBuffers_old\__init__.py:335
+#: virtualBuffers_old\__init__.py:336
msgid "moves to the next paragraph"
msgstr "Se mueve al párrafo siguiente"

-#: virtualBuffers_old\__init__.py:346
+#: virtualBuffers_old\__init__.py:347
msgid "moves to the previous paragraph"
msgstr "Se mueve al párrafo anterior"

-#: virtualBuffers_old\__init__.py:356
-#: virtualBuffers_old\__init__.py:367
+#: virtualBuffers_old\__init__.py:357
+#: virtualBuffers_old\__init__.py:368
msgid "no more tables"
msgstr "sin más tablas"

-#: virtualBuffers_old\__init__.py:378
-#: virtualBuffers_old\__init__.py:389
+#: virtualBuffers_old\__init__.py:379
+#: virtualBuffers_old\__init__.py:390
msgid "no more links"
msgstr "sin más enlaces"

-#: virtualBuffers_old\__init__.py:400
-#: virtualBuffers_old\__init__.py:411
+#: virtualBuffers_old\__init__.py:401
+#: virtualBuffers_old\__init__.py:412
msgid "no more lists"
msgstr "sin más listas"

-#: virtualBuffers_old\__init__.py:401
+#: virtualBuffers_old\__init__.py:402
msgid "moves to the next list"
msgstr "se mueve a la lista siguiente"

-#: virtualBuffers_old\__init__.py:412
+#: virtualBuffers_old\__init__.py:413
msgid "moves to the previous list"
msgstr "se mueve a la lista anterior"

-#: virtualBuffers_old\__init__.py:422
-#: virtualBuffers_old\__init__.py:433
+#: virtualBuffers_old\__init__.py:423
+#: virtualBuffers_old\__init__.py:434
msgid "no more list items"
msgstr "sin más elementos de lista"

-#: virtualBuffers_old\__init__.py:423
+#: virtualBuffers_old\__init__.py:424
msgid "moves to the next list item"
msgstr "se mueve al siguiente elemento de lista"

-#: virtualBuffers_old\__init__.py:434
+#: virtualBuffers_old\__init__.py:435
msgid "moves to the previous list item"
msgstr "Se mueve al anterior elemento de lista"

-#: virtualBuffers_old\__init__.py:444
-#: virtualBuffers_old\__init__.py:455
+#: virtualBuffers_old\__init__.py:445
+#: virtualBuffers_old\__init__.py:456
msgid "no more form fields"
msgstr "sin más campos de formulário"

-#: virtualBuffers_old\__init__.py:445
+#: virtualBuffers_old\__init__.py:446
msgid "Moves to the next form field"
msgstr "Se mueve al siguiente campo de formulario"

-#: virtualBuffers_old\__init__.py:456
+#: virtualBuffers_old\__init__.py:457
msgid "moves to the previous form field"
msgstr "se mueve al anterior campo de formulario"

-#: virtualBuffers_old\__init__.py:469
+#: virtualBuffers_old\__init__.py:470
msgid "text: \"%s\" not found"
msgstr "texto: \"%s\" no encontrado"

-#: virtualBuffers_old\__init__.py:475
+#: virtualBuffers_old\__init__.py:476
msgid "find a text pattern from the current cursor's position"
msgstr "buscar un patrón de texto desde la posición actual del cursor"

-#: virtualBuffers_old\__init__.py:479
+#: virtualBuffers_old\__init__.py:480
msgid "find next occurrence of text"
msgstr "buscar la siguiente aparición de texto"

-#: virtualBuffers_old\__init__.py:498
#: virtualBuffers_old\__init__.py:499
+#: virtualBuffers_old\__init__.py:500
msgid "h=headingQuickKey"
msgstr "h=tecla rápida para encabezado"

-#: virtualBuffers_old\__init__.py:500
#: virtualBuffers_old\__init__.py:501
+#: virtualBuffers_old\__init__.py:502
msgid "f=formFieldQuickKey"
msgstr "f=tecla rápida para campo de formulário"

-#: virtualBuffers_old\__init__.py:502
#: virtualBuffers_old\__init__.py:503
+#: virtualBuffers_old\__init__.py:504
msgid "p=paragraphQuickKey"
msgstr "p=tecla rápida para párrafo"

-#: virtualBuffers_old\__init__.py:504
#: virtualBuffers_old\__init__.py:505
+#: virtualBuffers_old\__init__.py:506
msgid "t=tableQuickKey"
msgstr "t=tecla rápida para tabla"

-#: virtualBuffers_old\__init__.py:506
#: virtualBuffers_old\__init__.py:507
+#: virtualBuffers_old\__init__.py:508
msgid "k=linkQuickKey"
msgstr "k=tecla rápida para enlace"

-#: virtualBuffers_old\__init__.py:508
#: virtualBuffers_old\__init__.py:509
+#: virtualBuffers_old\__init__.py:510
msgid "l=listQuickKey"
msgstr "l=tecla rápida para lista"

-#: virtualBuffers_old\__init__.py:510
#: virtualBuffers_old\__init__.py:511
+#: virtualBuffers_old\__init__.py:512
msgid "i=listItemQuickKey"
msgstr "i=tecla rápida para elemento de lista"

commit r1879 - in trunk: . source source/appModules

NVDA Subversion <svn@...>
 

Author: jteh
Date: Thu Apr 3 08:16:31 2008
New Revision: 1879

Log:
Move the logic for retrieving the status bar object and its text into api.getStatusBarObject() and api.GetStatusBarText() so that they can be used elsewhere. The reportStatusLine script now uses these functions.

Modified:
trunk/ (props changed)
trunk/source/api.py
trunk/source/appModules/_default.py

Modified: trunk/source/api.py
==============================================================================
--- trunk/source/api.py (original)
+++ trunk/source/api.py Thu Apr 3 08:16:31 2008
@@ -14,6 +14,7 @@
import speech
import virtualBufferHandler
import NVDAObjects
+import NVDAObjects.IAccessible
import winUser
import wx
import core
@@ -218,3 +219,34 @@
if got == text:
return True
return False
+
+def getStatusBar():
+ """Obtain the status bar for the current foreground object.
+ @return: The status bar object or C{None} if no status bar was found.
+ @rtype: L{NVDAObjects.NVDAObject}
+ """
+ # The status bar is usually at the bottom of the screen.
+ # Therefore, get the object at the bottom left of the foreground object using screen coordinates.
+ foreground = getForegroundObject()
+ left, top, width, height = foreground.location
+ bottom = top + height - 1
+ obj = NVDAObjects.IAccessible.getNVDAObjectFromPoint(left, bottom)
+
+ # We may have landed in a child of the status bar, so search the ancestry for a status bar.
+ while obj and not obj.role == controlTypes.ROLE_STATUSBAR:
+ obj = obj.parent
+
+ return obj
+
+def getStatusBarText(obj):
+ """Get the text from a status bar.
+ This includes the name of the status bar and the names and values of all of its children.
+ @param obj: The status bar.
+ @type obj: L{NVDAObjects.NVDAObject}
+ @return: The status bar text.
+ @rtype: str
+ """
+ text = obj.name
+ if text is None:
+ text = ""
+ return text + " ".join(chunk for child in obj.children for chunk in (child.name, child.value) if chunk and isinstance(chunk, basestring) and not chunk.isspace())

Modified: trunk/source/appModules/_default.py
==============================================================================
--- trunk/source/appModules/_default.py (original)
+++ trunk/source/appModules/_default.py Thu Apr 3 08:16:31 2008
@@ -598,26 +598,11 @@
script_reportCurrentFocus.__doc__ = _("reports the object with focus")

def script_reportStatusLine(self,keyPress,nextScript):
- import NVDAObjects.IAccessible
- # The status bar is usually at the bottom of the screen.
- # Therefore, get the object at the bottom left of the foreground object using screen coordinates.
- foreground = api.getForegroundObject()
- left, top, width, height = foreground.location
- bottom = top + height - 1
- obj = NVDAObjects.IAccessible.getNVDAObjectFromPoint(left, bottom)
-
- # We may have landed in a child of the status bar, so search the ancestry for a status bar.
- while obj and not obj.role == controlTypes.ROLE_STATUSBAR:
- obj = obj.parent
-
+ obj = api.getStatusBar()
if not obj:
speech.speakMessage(_("no status bar found"))
return
-
- text = obj.name
- if text is None:
- text = ""
- text += " ".join(chunk for child in obj.children for chunk in (child.name, child.value) if chunk and isinstance(chunk, basestring) and not chunk.isspace())
+ text = api.getStatusBarText(obj)

if keyboardHandler.lastKeyCount == 1:
speech.speakMessage(text)

commit r1880 - in trunk: . source/appModules

NVDA Subversion <svn@...>
 

Author: jteh
Date: Thu Apr 3 08:29:04 2008
New Revision: 1880

Log:
The Media Player Classic status bar is non-standard. However, it does conform to our idea of a status bar, so we can just override the role and let the new status bar code handle the rest. This removes a lot of unnecessary bloat from the Media Player Classic appModule.

Removed:
trunk/source/appModules/mplayerc_desktop.kbd
Modified:
trunk/ (props changed)
trunk/source/appModules/mplayerc.py

Modified: trunk/source/appModules/mplayerc.py
==============================================================================
--- trunk/source/appModules/mplayerc.py (original)
+++ trunk/source/appModules/mplayerc.py Thu Apr 3 08:29:04 2008
@@ -5,55 +5,10 @@
#See the file COPYING for more details.

import appModuleHandler
-from NVDAObjects.IAccessible import IAccessible, getNVDAObjectFromEvent
import controlTypes
-import api
-import IAccessibleHandler
-import ctypes
-import speech
-import keyboardHandler

class appModule(appModuleHandler.appModule):

def event_NVDAObject_init(self,obj):
if obj.windowClassName=="#32770" and obj.windowControlID==10021:
- obj.__class__=MPCStatusBar
-
- def script_reportStatusLine(self,keyPress,nextScript):
- focus=api.getFocusObject()
- statusBarObject=focus.statusBar
- if not statusBarObject:
- statusWindow=ctypes.windll.user32.FindWindowExW(focus.parent.windowHandle,0,u'#32770',0)
- if statusWindow:
- statusBarObject=getNVDAObjectFromEvent(statusWindow,IAccessibleHandler.OBJID_CLIENT,0)
- if not statusBarObject:
- speech.speakMessage(_("no status bar found"))
- return
- if keyboardHandler.lastKeyCount == 1:
- speech.speakObject(statusBarObject,reason=speech.REASON_QUERY)
- else:
- speech.speakSpelling(statusBarObject.value)
- api.setNavigatorObject(statusBarObject)
- script_reportStatusLine.__doc__ = _("reads the current aplication status bar and moves the navigation cursor to it")
-
-class MPCStatusBar(IAccessible):
-
- def _get_firstChild(self):
- return None
-
- def _get_lastChild(self):
- return None
-
- def _get_children(self):
- return []
-
- def _get_role(self):
- return controlTypes.ROLE_STATUSBAR
-
- def _get_value(self):
- oldValue=super(MPCStatusBar,self)._get_value()
- valueFromChildren=" ".join([" ".join([y for y in (x.name,x.value) if y and not y.isspace()]) for x in super(MPCStatusBar,self)._get_children() if x.role == controlTypes.ROLE_GRAPHIC])
- if valueFromChildren:
- return valueFromChildren
- else:
- return oldValue
+ obj.role = controlTypes.ROLE_STATUSBAR

commit r1881 - in trunk/source: . NVDAObjects

NVDA Subversion <svn@...>
 

Author: mdcurran
Date: Thu Apr 3 11:47:42 2008
New Revision: 1881

Log:
Some fixes to make it more impossible for the exception in keyboardHandler.internal_keyDownEvent because of it trying to get a virtualBuffer, to occure. Base NVDAObject's virtualBuffer property: rename _virtualBufferRef to _virtualBuffer. _virtualBuffer can now be handled either as a weakref, or as None etc. When assigning to the virtualBuffer property, if the value is not None, then its wrapped in a weakref, if its None, then it just gets set as None. When retreaving the virtualBuffer property's value, if _virtualBuffer exists, its first checked to see if its a weakref, if so, then its dereferenced. If this value is not None and it is a virtualBuffer that exists in the virtualBuffer runningTable, then it is returned, else, _virtualBuffer is set to None, and None is returned. api.setFocusObject: make sure that obj.virtualBuffer gets assigned to, even if the virtualBuffer that virtualBufferHandler.update returns is just None. This stops virtualBuffers trying to be fetched after this value is set, whether or not its a valid virtualBuffer.

Modified:
trunk/source/NVDAObjects/__init__.py
trunk/source/api.py

Modified: trunk/source/NVDAObjects/__init__.py
==============================================================================
--- trunk/source/NVDAObjects/__init__.py (original)
+++ trunk/source/NVDAObjects/__init__.py Thu Apr 3 11:47:42 2008
@@ -383,21 +383,30 @@
return not self.__eq__(other)

def _get_virtualBuffer(self):
- if hasattr(self,'_virtualBufferRef'):
- v=self._virtualBufferRef()
+ if hasattr(self,'_virtualBuffer'):
+ v=self._virtualBuffer
+ if isinstance(v,weakref.ref):
+ v=v()
if v and v in virtualBufferHandler.runningTable:
return v
else:
+ self._virtualBuffer=None
return None
else:
v=virtualBufferHandler.getVirtualBuffer(self)
if v:
- self._virtualBufferRef=weakref.ref(v)
+ self._virtualBuffer=weakref.ref(v)
return v

def _set_virtualBuffer(self,obj):
if obj:
- self._virtualBufferRef=weakref.ref(obj)
+ self._virtualBuffer=weakref.ref(obj)
+ else: #We can't point a weakref to None, so just set the private variable to None, it can handle that
+ self._virtualBuffer=None
+
+
+
+

def _get_appModule(self):
if not hasattr(self,'_appModuleRef'):

Modified: trunk/source/api.py
==============================================================================
--- trunk/source/api.py (original)
+++ trunk/source/api.py Thu Apr 3 11:47:42 2008
@@ -111,8 +111,8 @@
for o in globalVars.focusAncestors[globalVars.focusDifferenceLevel:]+[globalVars.focusObject]:
virtualBufferObject=virtualBufferHandler.update(o)
if virtualBufferObject:
- obj.virtualBuffer=virtualBufferObject
break
+ obj.virtualBuffer=virtualBufferObject
if obj.virtualBuffer:
virtualBufferHandler.reportPassThrough(obj.virtualBuffer)
if globalVars.log.getEffectiveLevel()<=logging.INFO:

Re: [NVDA] #40: GDIHooking library for NVDA

"NVDA Trac" <trac@...>
 

#40: GDIHooking library for NVDA
--------------------------+-------------------------------------------------
Reporter: aleksey_s | Owner: aleksey_s
Type: enhancement | Status: accepted
Priority: major | Milestone: 0.6
Component: Core | Version: trunk
Resolution: | Keywords: gdi hooks
Blocking: | Blockedby:
--------------------------+-------------------------------------------------

Comment(by aleksey_s):

12 Ђ¤¬Ё­Ёбва в®а <Ђ¤¬Ё­Ёбва в®а@...5...> 2008-04-03
*fixed some small bugs in InterceptAPI.pas, HookedFunctions.pas

--
Ticket URL: <http://trac.nvda-project.org/index.fcgi/ticket/40#comment:7>
NVDA <http://www.nvda-project.org/>
A free and open-source screen reader for Windows

commit r1882 - trunk/source/locale/it/LC_MESSAGES

NVDA Subversion <svn@...>
 

Author: pvagner
Date: Thu Apr 3 20:31:29 2008
New Revision: 1882

Log:
* updated italian language file

Modified:
trunk/source/locale/it/LC_MESSAGES/nvda.po

Modified: trunk/source/locale/it/LC_MESSAGES/nvda.po
==============================================================================
--- trunk/source/locale/it/LC_MESSAGES/nvda.po (original)
+++ trunk/source/locale/it/LC_MESSAGES/nvda.po Thu Apr 3 20:31:29 2008
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2007-05-02 14:34+ora solare Europa occidentale\n"
-"PO-Revision-Date: 2008-03-24 15:21+0100\n"
+"PO-Revision-Date: 2008-04-03 17:18+0100\n"
"Last-Translator: Luca Maianti <lucanight@...13...>\n"
"Language-Team: IT <lucanight@...13...>\n"
"MIME-Version: 1.0\n"
@@ -19,7 +19,7 @@
msgstr "Livello %s"

#: NVDAObjects\IAccessible\__init__.py:69
-#: NVDAObjects\IAccessible\__init__.py:420
+#: NVDAObjects\IAccessible\__init__.py:415
#: NVDAObjects\IAccessible\sysListView32.py:89
msgid "%s of %s"
msgstr "%s di %s"
@@ -55,22 +55,22 @@

#: NVDAObjects\IAccessible\excel.py:103
#: controlTypes.py:291
-#: textBuffer.py:265
-#: textBuffer.py:317
+#: textBuffer.py:266
+#: textBuffer.py:318
msgid "bold"
msgstr "Grassetto"

#: NVDAObjects\IAccessible\excel.py:105
-#: textBuffer.py:272
-#: textBuffer.py:319
+#: textBuffer.py:273
+#: textBuffer.py:320
msgid "italic"
msgstr "Corsivo"

#: NVDAObjects\IAccessible\excel.py:107
#: characterSymbols.py:50
#: controlTypes.py:293
-#: textBuffer.py:279
-#: textBuffer.py:321
+#: textBuffer.py:280
+#: textBuffer.py:322
msgid "underline"
msgstr "Sottolineato"

@@ -138,51 +138,6 @@
msgid "variant"
msgstr "Variante"

-#: api.py:183
-#: api.py:186
-msgid "virtual buffer pass through"
-msgstr "Passa attraverso il buffer virtuale"
-
-#: api.py:183
-#: appModules\_default.py:45
-#: appModules\_default.py:120
-#: appModules\_default.py:130
-#: appModules\_default.py:140
-#: appModules\_default.py:150
-#: appModules\_default.py:521
-#: appModules\_default.py:603
-#: appModules\_default.py:645
-#: appModules\_default.py:655
-#: appModules\_default.py:665
-#: appModules\_default.py:675
-#: keyboardHandler.py:53
-#: keyboardHandler.py:55
-#: keyboardHandler.py:57
-#: speech.py:356
-#: speech.py:362
-#: virtualBuffers\__init__.py:200
-msgid "off"
-msgstr "Disattivato"
-
-#: api.py:186
-#: appModules\_default.py:42
-#: appModules\_default.py:123
-#: appModules\_default.py:133
-#: appModules\_default.py:143
-#: appModules\_default.py:153
-#: appModules\_default.py:606
-#: appModules\_default.py:648
-#: appModules\_default.py:658
-#: appModules\_default.py:668
-#: appModules\_default.py:678
-#: keyboardHandler.py:53
-#: keyboardHandler.py:55
-#: keyboardHandler.py:57
-#: speech.py:351
-#: virtualBuffers\__init__.py:200
-msgid "on"
-msgstr "Attivato"
-
#: appModuleHandler.py:228
msgid "Error in appModule %s"
msgstr "Errore in appmodule %s"
@@ -195,517 +150,555 @@
msgid "Could not load default module "
msgstr "Impossibile caricare il modulo di default"

-#: appModules\_default.py:47
+#: appModules\_default.py:50
+#: appModules\_default.py:131
+#: appModules\_default.py:141
+#: appModules\_default.py:151
+#: appModules\_default.py:161
+#: appModules\_default.py:619
+#: appModules\_default.py:667
+#: appModules\_default.py:677
+#: appModules\_default.py:687
+#: appModules\_default.py:697
+#: keyboardHandler.py:53
+#: keyboardHandler.py:55
+#: keyboardHandler.py:57
+#: speech.py:351
+#: virtualBufferHandler.py:78
+#: virtualBuffers\__init__.py:201
+msgid "on"
+msgstr "Attivato"
+
+#: appModules\_default.py:53
+#: appModules\_default.py:128
+#: appModules\_default.py:138
+#: appModules\_default.py:148
+#: appModules\_default.py:158
+#: appModules\_default.py:529
+#: appModules\_default.py:616
+#: appModules\_default.py:664
+#: appModules\_default.py:674
+#: appModules\_default.py:684
+#: appModules\_default.py:694
+#: keyboardHandler.py:53
+#: keyboardHandler.py:55
+#: keyboardHandler.py:57
+#: speech.py:356
+#: speech.py:362
+#: virtualBufferHandler.py:78
+#: virtualBuffers\__init__.py:201
+msgid "off"
+msgstr "Disattivato"
+
+#: appModules\_default.py:55
msgid "keyboard help %s"
msgstr "Aiuto tastiera %s"

-#: appModules\_default.py:48
+#: appModules\_default.py:56
msgid "Turns keyboard help on and off. When on, pressing a key on the keyboard will tell you what script is associated with it, if any."
msgstr "Attiva o disattiva l'aiuto tastiera"

-#: appModules\_default.py:72
-#: cursorManager.py:225
+#: appModules\_default.py:80
+#: cursorManager.py:226
msgid "no selection"
msgstr "Nessuna selezione"

-#: appModules\_default.py:74
+#: appModules\_default.py:82
#: speech.py:263
#: speech.py:407
-#: textBuffer.py:536
-#: textBuffer.py:540
-#: textBuffer.py:542
-#: textBuffer.py:548
+#: textBuffer.py:537
+#: textBuffer.py:541
+#: textBuffer.py:543
+#: textBuffer.py:549
msgid "selected %s"
msgstr "Selezionato %s"

-#: appModules\_default.py:82
+#: appModules\_default.py:90
msgid "Reports the current date and time"
msgstr "Legge la data e l'ora attuale"

-#: appModules\_default.py:88
-#: appModules\_default.py:95
+#: appModules\_default.py:96
+#: appModules\_default.py:103
msgid "rate %d%%"
msgstr "Velocita' %d%%"

-#: appModules\_default.py:89
+#: appModules\_default.py:97
msgid "Increases the speech rate by 5 percent"
msgstr "Aumenta la velocita' della voce del 5 percento"

-#: appModules\_default.py:96
+#: appModules\_default.py:104
msgid "decreases the speech rate by 5 percent"
msgstr "Diminuisce la velocita' della voce del 5 percento"

-#: appModules\_default.py:101
+#: appModules\_default.py:109
msgid "Increases currently active setting in the synth settings ring"
msgstr "Aumenta l'impostazione attualmente attiva nelle impostazioni del sintetizzatore"

-#: appModules\_default.py:106
+#: appModules\_default.py:114
msgid "Decreases currently active setting in the synth settings ring"
msgstr "Diminuisce l'impostazione attualmente attiva nelle impostazioni del sintetizzatore"

-#: appModules\_default.py:111
+#: appModules\_default.py:119
msgid "Moves to the next available setting in the synth settings ring"
msgstr "Si sposta all'impostazione disponibile successiva nelle impostazioni del sintetizzatore"

-#: appModules\_default.py:116
+#: appModules\_default.py:124
msgid "Moves to the previous available setting in the synth settings ring"
msgstr "Si sposta all'impostazione disponibile precedente nelle impostazioni del sintetizzatore"

-#: appModules\_default.py:125
+#: appModules\_default.py:133
msgid "speak typed characters"
msgstr "Leggi i caratteri digitati"

-#: appModules\_default.py:126
+#: appModules\_default.py:134
msgid "Toggles on and off the speaking of typed characters"
msgstr "Attiva o disattiva la lettura dei caratteri digitati"

-#: appModules\_default.py:135
+#: appModules\_default.py:143
msgid "speak typed words"
msgstr "Leggi le parole digitate"

-#: appModules\_default.py:136
+#: appModules\_default.py:144
msgid "Toggles on and off the speaking of typed words"
msgstr "Attiva o disattiva la lettura delle parole digitate"

-#: appModules\_default.py:145
+#: appModules\_default.py:153
msgid "speak command keys"
msgstr "Leggi i tasti di comando"

-#: appModules\_default.py:146
+#: appModules\_default.py:154
msgid "Toggles on and off the speaking of typed keys, that are not specifically characters"
msgstr "Attiva o disattiva la lettura dei tasti di comando"

-#: appModules\_default.py:155
+#: appModules\_default.py:163
msgid "speak punctuation"
msgstr "Leggi la punteggiatura"

-#: appModules\_default.py:156
+#: appModules\_default.py:164
msgid "Toggles on and off the speaking of punctuation. When on NVDA will say the names of punctuation symbols, when off it will be up to the synthesizer as to how it speaks punctuation"
msgstr "Attiva o disattiva la lettura della punteggiatura. Se attiva nvda leggera' tutti i simboli di punteggiatura"

-#: appModules\_default.py:159
+#: appModules\_default.py:167
msgid "Move mouse to navigator"
msgstr "Sposta il mouse alla posizione del navigatore di oggetti"

-#: appModules\_default.py:164
+#: appModules\_default.py:172
msgid "object has no location"
msgstr "L'oggetto non ha posizione"

-#: appModules\_default.py:167
+#: appModules\_default.py:175
msgid "Moves the mouse pointer to the current navigator object."
msgstr "Sposta il puntatore del mouse sull'oggetto attuale nel navigatore"

-#: appModules\_default.py:170
+#: appModules\_default.py:178
msgid "Move navigator object to mouse"
msgstr "Sposta il navigatore di oggetti alla posizione del mouse"

-#: appModules\_default.py:179
-#: appModules\_default.py:209
-#: appModules\_default.py:229
-#: appModules\_default.py:242
-#: appModules\_default.py:255
-#: appModules\_default.py:268
-#: appModules\_default.py:281
-#: appModules\_default.py:304
-#: appModules\_default.py:327
-#: appModules\_default.py:336
-#: appModules\_default.py:627
+#: appModules\_default.py:187
+#: appModules\_default.py:217
+#: appModules\_default.py:237
+#: appModules\_default.py:250
+#: appModules\_default.py:263
+#: appModules\_default.py:276
+#: appModules\_default.py:289
+#: appModules\_default.py:312
+#: appModules\_default.py:335
+#: appModules\_default.py:344
+#: appModules\_default.py:646
msgid "no navigator object"
msgstr "Non ci sono oggetti per il navigatore"

-#: appModules\_default.py:200
+#: appModules\_default.py:208
msgid "%s copied to clipboard"
msgstr "%s copiato negli appunti"

-#: appModules\_default.py:204
+#: appModules\_default.py:212
msgid "Reports the current navigator object or, if pressed three times, Copies name and value of current navigator object to the clipboard"
msgstr "Legge l'oggetto attuale nel navigatore o, se premuto tre volte, copia il nome e il valore dell'oggetto attuale negli appumti"

-#: appModules\_default.py:212
+#: appModules\_default.py:220
msgid "No location information for navigator object"
msgstr "Non ci sono informazioni di posizione per il navigatore di oggetti"

-#: appModules\_default.py:214
+#: appModules\_default.py:222
msgid "%d wide by %d high, located %d from left and %d from top"
msgstr "%d di altezza per %d di larghezza, posizionato %d da sinistra e %d dall'alto"

-#: appModules\_default.py:215
+#: appModules\_default.py:223
msgid "Reports the hight, width and position of the current navigator object"
msgstr "Legge l'altezza, la larghezza e la posizione dell'oggetto attuale del navigatore"

-#: appModules\_default.py:220
-#: appModules\_default.py:585
+#: appModules\_default.py:228
+#: appModules\_default.py:597
msgid "no focus"
msgstr "Nessun focus"

-#: appModules\_default.py:222
+#: appModules\_default.py:230
msgid "move to focus"
msgstr "Vai al focus"

-#: appModules\_default.py:224
+#: appModules\_default.py:232
msgid "Sets the navigator object to the current focus"
msgstr "Sposta l'oggetto del navigatore al focus attuale"

-#: appModules\_default.py:236
+#: appModules\_default.py:244
msgid "No parents"
msgstr "Nessun oggetto genitore"

-#: appModules\_default.py:237
+#: appModules\_default.py:245
msgid "Sets the navigator object to the parent of the object it is currently on."
msgstr "Sposta il navigatore di oggetti sull'oggetto genitore dell'oggetto attuale"

-#: appModules\_default.py:249
+#: appModules\_default.py:257
msgid "No next"
msgstr "Ultimo"

-#: appModules\_default.py:250
+#: appModules\_default.py:258
msgid "Sets the navigator object to the next object to the one it is currently on"
msgstr "Sposta il navigatore di oggetti sull'oggetto seguente"

-#: appModules\_default.py:262
+#: appModules\_default.py:270
msgid "No previous"
msgstr "Primo"

-#: appModules\_default.py:263
+#: appModules\_default.py:271
msgid "Sets the navigator object to the previous object to the one it is currently on"
msgstr "Sposta il navigatore di oggetti sull'oggetto precedente"

-#: appModules\_default.py:275
+#: appModules\_default.py:283
msgid "No children"
msgstr "Nessun oggetto figlio"

-#: appModules\_default.py:276
+#: appModules\_default.py:284
msgid "Sets the navigator object to the first child object to the one it is currently on"
msgstr "Sposta il navigatore di oggetti sull'oggetto figlio dell'oggetto attuale"

-#: appModules\_default.py:298
+#: appModules\_default.py:306
msgid "end of flow"
msgstr "Fine"

-#: appModules\_default.py:299
+#: appModules\_default.py:307
msgid "Sets the navigator object to the object this object flows to."
msgstr "Sposta il navigatore di oggetti sull'oggetto precedente"

-#: appModules\_default.py:321
+#: appModules\_default.py:329
msgid "Beginning of flow"
msgstr "Inizio"

-#: appModules\_default.py:322
+#: appModules\_default.py:330
msgid "Sets the navigator object to the object this object flows from."
msgstr "Sposta il navigatore di oggetti sull'oggetto successivo"

-#: appModules\_default.py:330
+#: appModules\_default.py:338
msgid "Performs the default action on the current navigator object (example: presses it if it is a button)."
msgstr "Esegue l'opzione di default sull'oggetto attuale nel navigatore, ad esempio lo preme se e' un pulsante"

-#: appModules\_default.py:341
+#: appModules\_default.py:349
msgid "inside"
msgstr "Dentro"

-#: appModules\_default.py:344
+#: appModules\_default.py:352
msgid "Reports where the current navigator object is by reporting each of its ancestors"
msgstr "Legge dove si trova l'oggetto attuale nel navigatore"

-#: appModules\_default.py:350
-#: appModules\_default.py:362
-#: appModules\_default.py:404
-#: textBuffer.py:363
-#: textBuffer.py:390
-#: textBuffer.py:411
-#: textBuffer.py:432
-#: virtualBuffers_old\__init__.py:269
+#: appModules\_default.py:358
+#: appModules\_default.py:370
+#: appModules\_default.py:412
+#: textBuffer.py:364
+#: textBuffer.py:391
+#: textBuffer.py:412
+#: textBuffer.py:433
+#: virtualBuffers_old\__init__.py:270
msgid "top"
msgstr "All'inizio"

-#: appModules\_default.py:352
+#: appModules\_default.py:360
msgid "Moves the review cursor to the top line of the current navigator object"
msgstr "Sposta il cursore virtuale sulla riga superiore dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:364
+#: appModules\_default.py:372
msgid "Moves the review cursor to the previous line of the current navigator object"
msgstr "Sposta il cursore virtuale sulla riga precedente dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:374
+#: appModules\_default.py:382
msgid "Reports the line of the current navigator object where the review cursor is situated"
msgstr "Legge la riga dell'oggetto attuale nel navigatore dove e' posizionato il cursore virtuale"

-#: appModules\_default.py:384
#: appModules\_default.py:392
-#: appModules\_default.py:426
-#: textBuffer.py:368
-#: textBuffer.py:381
-#: textBuffer.py:402
-#: textBuffer.py:423
-#: virtualBuffers_old\__init__.py:284
+#: appModules\_default.py:400
+#: appModules\_default.py:434
+#: textBuffer.py:369
+#: textBuffer.py:382
+#: textBuffer.py:403
+#: textBuffer.py:424
+#: virtualBuffers_old\__init__.py:285
msgid "bottom"
msgstr "Alla fine"

-#: appModules\_default.py:386
+#: appModules\_default.py:394
msgid "Moves the review cursor to the next line of the current navigator object"
msgstr "Sposta il cursore virtuale sulla riga successiva dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:394
+#: appModules\_default.py:402
msgid "Moves the review cursor to the bottom line of the current navigator object"
msgstr "Sposta il cursore virtuale sull'ultima riga dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:406
+#: appModules\_default.py:414
msgid "Moves the review cursor to the previous word of the current navigator object"
msgstr "Sposta il cursore virtuale sulla parola precedente dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:416
+#: appModules\_default.py:424
msgid "Speaks the word of the current navigator object where the review cursor is situated"
msgstr "Legge la parola dell'oggetto attuale dove e' posizionato il cursore virtuale"

-#: appModules\_default.py:428
+#: appModules\_default.py:436
msgid "Moves the review cursor to the next word of the current navigator object"
msgstr "Sposta il cursore virtuale sulla parola successiva dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:436
-#: appModules\_default.py:448
+#: appModules\_default.py:444
+#: appModules\_default.py:456
msgid "left"
msgstr "Sinistra"

-#: appModules\_default.py:438
+#: appModules\_default.py:446
msgid "Moves the review cursor to the start of the line where it is situated, in the current navigator object"
msgstr "Sposta il cursore virtuale all'inizio della riga dell'oggetto attuale dove e' posizionato"

-#: appModules\_default.py:456
+#: appModules\_default.py:464
msgid "Moves the review cursor to the previous character of the current navigator object"
msgstr "Sposta il cursore virtuale sul carattere precedente dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:471
+#: appModules\_default.py:479
msgid "Reports the character of the current navigator object where the review cursor is situated"
msgstr "Legge il carattere dell'oggetto attuale dove e' posizionato il cursore virtuale"

-#: appModules\_default.py:481
-#: appModules\_default.py:498
+#: appModules\_default.py:489
+#: appModules\_default.py:506
msgid "right"
msgstr "Destra"

-#: appModules\_default.py:489
+#: appModules\_default.py:497
msgid "Moves the review cursor to the next character of the current navigator object"
msgstr "Sposta il cursore virtuale sul carattere successivo dell'oggetto attuale nel navigatore"

-#: appModules\_default.py:500
+#: appModules\_default.py:508
msgid "Moves the review cursor to the end of the line where it is situated, in the current navigator object"
msgstr "Sposta il cursore virtuale alla fine della riga dell'oggetto attuale dove e' posizionato"

-#: appModules\_default.py:507
+#: appModules\_default.py:515
msgid "Moves the review cursor to the position of the system caret, in the current navigator object"
msgstr "Sposta il cursore virtuale alla posizione del cursore di sistema"

-#: appModules\_default.py:514
+#: appModules\_default.py:522
msgid "Moves the system caret to the position of the review cursor , in the current navigator object"
msgstr "Sposta il cursore di sistema alla posizione del cursore virtuale nell'oggetto attuale nel navigatore"

-#: appModules\_default.py:523
+#: appModules\_default.py:531
msgid "beeps"
msgstr "Beeps"

-#: appModules\_default.py:525
+#: appModules\_default.py:533
msgid "talk"
msgstr "Parlare"

-#: appModules\_default.py:527
+#: appModules\_default.py:535
msgid "speech mode %s"
msgstr "Modalita' di voce %s"

-#: appModules\_default.py:529
+#: appModules\_default.py:537
msgid "Toggles between the speech modes of off, beep and talk. When set to off NVDA will not speak anything. If beeps then NVDA will simply beep each time it its supposed to speak something. If talk then NVDA wil just speak normally."
msgstr "Cambia la modalita' di voce disattiva, beeps o attiva"

-#: appModules\_default.py:533
+#: appModules\_default.py:545
msgid "Toggles virtualBuffer pass-through mode on and off. When on, keys will pass straight through the current virtualBuffer, allowing you to interact with a control without the virtualBuffer doing something else with the key."
msgstr "Attiva o disattiva il passaggio attraverso il buffer virtuale"

-#: appModules\_default.py:537
+#: appModules\_default.py:549
msgid "Quits NVDA!"
msgstr "Esce da nvda"

-#: appModules\_default.py:541
+#: appModules\_default.py:553
msgid "Shows the NVDA interface window"
msgstr "Mostra la finestra dell'interfaccia di nvda"

-#: appModules\_default.py:546
+#: appModules\_default.py:558
msgid "reads from review cursor up to end of current text, moving the review cursor as it goes"
msgstr "Legge dal cursore virtuale fino alla fine del testo spostando il cursore"

-#: appModules\_default.py:551
+#: appModules\_default.py:563
msgid "reads from navigator object "
msgstr "Legge dalla posizione del navigatore di oggetti"

-#: appModules\_default.py:563
+#: appModules\_default.py:575
msgid "reads from system caret up to end of text, moving the caret as it goes"
msgstr "Legge dal cursore di sistema fino alla fine del testo spostando il cursore"

-#: appModules\_default.py:586
+#: appModules\_default.py:598
msgid "reports the object with focus"
msgstr "Legge l'oggetto che ha il focus"

-#: appModules\_default.py:592
-#: appModules\mplayerc.py:30
+#: appModules\_default.py:603
msgid "no status bar found"
msgstr "Nessuna barra di stato trovata"

-#: appModules\_default.py:599
-#: appModules\mplayerc.py:37
+#: appModules\_default.py:612
msgid "reads the current aplication status bar and moves the navigation cursor to it"
msgstr "Legge la barra di stato dell'applicazione attuale e sposta il cursore di navigazione su di essa"

-#: appModules\_default.py:608
+#: appModules\_default.py:621
msgid "Report object under mouse"
msgstr "Leggi l'oggetto sotto il mouse"

-#: appModules\_default.py:609
+#: appModules\_default.py:622
msgid "Toggles on and off the reporting of objects under the mouse"
msgstr "Attiva o disattiva la lettura dell'oggetto sotto il mouse"

-#: appModules\_default.py:615
+#: appModules\_default.py:628
msgid "Reports the title of the current application or foreground window"
msgstr "Legge il titolo della finestra"

-#: appModules\_default.py:622
+#: appModules\_default.py:635
msgid "speaks the current foreground object"
msgstr "Legge l'oggetto in primo piano"

-#: appModules\_default.py:631
-#: cursorManager.py:242
+#: appModules\_default.py:650
+#: cursorManager.py:243
msgid "copied to clipboard"
msgstr "Copiato negli appunti"

-#: appModules\_default.py:635
+#: appModules\_default.py:654
msgid "Control ID: %s"
msgstr "Id controllo %s"

-#: appModules\_default.py:636
+#: appModules\_default.py:655
msgid "Class: %s"
msgstr "Classe %s"

-#: appModules\_default.py:638
+#: appModules\_default.py:657
msgid "internal text: %s"
msgstr "Testo interno: %s"

-#: appModules\_default.py:639
+#: appModules\_default.py:658
msgid "text: %s"
msgstr "Testo: %s"

-#: appModules\_default.py:641
+#: appModules\_default.py:660
msgid "reports some info about the current navigator object, mainly useful for developers. When pressed 2 times it copies control id, class and internal text to the windows clipboard"
msgstr "Legge alcune informazioni sull'oggetto attuale nel navigatore utile soprattutto agli sviluppatori se premuto 2 volte copia l'id del controllo la classe e il testo negli appunti"

-#: appModules\_default.py:650
+#: appModules\_default.py:669
msgid "Beep on progress bar updates"
msgstr "Emetti un beep all'aggiornamento delle barre di progresso"

-#: appModules\_default.py:651
+#: appModules\_default.py:670
msgid "Toggles on and off the beeping on progress bar updates"
msgstr "Attiva o disattiva l'emissione di un beep all'aggiornamento delle barre di progresso"

-#: appModules\_default.py:660
+#: appModules\_default.py:679
msgid "report dynamic content changes"
msgstr "Leggi i cambiamenti dei contenuti dinamici"

-#: appModules\_default.py:661
+#: appModules\_default.py:680
msgid "Toggles on and off the reporting of dynamic content changes, such as new text in dos console windows"
msgstr "Attiva o disattiva la lettura dei cambiamenti dei contenuti dinamici"

-#: appModules\_default.py:670
+#: appModules\_default.py:689
msgid "caret moves review cursor"
msgstr "Sposta il cursore virtuale"

-#: appModules\_default.py:671
+#: appModules\_default.py:690
msgid "Toggles on and off the movement of the review cursor due to the caret moving."
msgstr "Attiva o disattiva i movimenti del cursore virtuale"

-#: appModules\_default.py:680
+#: appModules\_default.py:699
msgid "focus moves navigator object"
msgstr "Il navigatore di oggetti segue il focus"

-#: appModules\_default.py:681
+#: appModules\_default.py:700
msgid "Toggles on and off the movement of the navigator object due to focus changes"
msgstr "Attiva o disattiva l'inseguimento del focus, se attivo il navigatore di oggetti seguira' il focus"

-#: appModules\_default.py:693
+#: appModules\_default.py:712
msgid "no system battery"
msgstr "Nessuna batteria di sistema"

-#: appModules\_default.py:695
+#: appModules\_default.py:714
msgid "%d percent"
msgstr "%d percento"

-#: appModules\_default.py:696
+#: appModules\_default.py:715
msgid "AC power on"
msgstr "Alimentazione attiva"

-#: appModules\_default.py:698
+#: appModules\_default.py:717
msgid "%d hours and %d minutes remaining"
msgstr "%d ore e %d minuti restanti"

-#: appModules\_default.py:700
+#: appModules\_default.py:719
msgid "reports battery status and time remaining if AC is not plugged in"
msgstr "Legge lo stato della batteria e il tempo di autonomia rimasto se l'alimentazione e' disattivata"

-#: appModules\_default.py:704
+#: appModules\_default.py:723
msgid "Pass next key through"
msgstr "Passa il tasto successivo all'applicazione"

-#: appModules\_default.py:705
+#: appModules\_default.py:724
msgid "The next key that is pressed will not be handled at all by NVDA, it will be passed directly through to Windows."
msgstr "Il tasto successivo premuto non viene riconosciuto da nvda ma passa direttamente al controllo di windows"

-#: appModules\_default.py:709
+#: appModules\_default.py:728
msgid "Currently running application is %s."
msgstr "L'applicazione corrente e' %s"

-#: appModules\_default.py:714
+#: appModules\_default.py:733
msgid "default module"
msgstr "Modulo di default"

-#: appModules\_default.py:715
+#: appModules\_default.py:734
msgid "and currently loaded module is %s"
msgstr "e il modulo caricato e' %s"

-#: appModules\_default.py:716
+#: appModules\_default.py:735
msgid "Speaks filename of the active application along with name of the currently loaded appmodule"
msgstr "Legge il nome del file dell'applicazione corrente ed il modulo caricato"

-#: appModules\_default.py:720
+#: appModules\_default.py:739
msgid "Shows NVDA general settings dialog"
msgstr "Mostra la finestra impostazioni generali di nvda"

-#: appModules\_default.py:724
+#: appModules\_default.py:743
msgid "Shows NVDA synthesizer dialog"
msgstr "Mostra la finestra sintetizzatore di nvda"

-#: appModules\_default.py:728
+#: appModules\_default.py:747
msgid "Shows NVDA voice settings dialog"
msgstr "Mostra la finestra impostazioni voce di nvda"

-#: appModules\_default.py:732
+#: appModules\_default.py:751
msgid "Shows NVDA keyboard settings dialog"
msgstr "Mostra la finestra impostazioni tastiera di nvda"

-#: appModules\_default.py:736
+#: appModules\_default.py:755
msgid "Shows NVDA mouse settings dialog"
msgstr "Mostra la finestra impostazioni mouse di nvda"

-#: appModules\_default.py:740
+#: appModules\_default.py:759
msgid "Shows NVDA object presentation settings dialog"
msgstr "Mostra la finestra impostazioni presentazione oggetti di nvda"

-#: appModules\_default.py:744
+#: appModules\_default.py:763
msgid "Shows NVDA virtual buffers settings dialog"
msgstr "Mostra la finestra impostazioni del buffer virtuale di nvda"

-#: appModules\_default.py:748
+#: appModules\_default.py:767
msgid "Shows NVDA document formatting settings dialog"
msgstr "Mostra la finestra impostazioni formattazione documento di nvda"

-#: appModules\_default.py:753
+#: appModules\_default.py:772
msgid "Saves current NVDA configuration to file"
msgstr "Salva la configurazione corrente di nvda su file"

-#: appModules\_default.py:757
+#: appModules\_default.py:776
msgid "loads NVDA configuration from file, overriding current changes"
msgstr "Carica la configurazione di nvda da file "

@@ -937,12 +930,12 @@
msgstr "Tilde"

#: characterSymbols.py:56
-#: virtualBuffers_old\MSHTML.py:253
-#: virtualBuffers_old\MSHTML.py:260
-#: virtualBuffers_old\adobe.py:263
-#: virtualBuffers_old\adobe.py:274
-#: virtualBuffers_old\gecko.py:256
-#: virtualBuffers_old\gecko.py:267
+#: virtualBuffers_old\MSHTML.py:257
+#: virtualBuffers_old\MSHTML.py:264
+#: virtualBuffers_old\adobe.py:266
+#: virtualBuffers_old\adobe.py:277
+#: virtualBuffers_old\gecko.py:259
+#: virtualBuffers_old\gecko.py:270
msgid "bullet"
msgstr "Puntato"

@@ -1156,8 +1149,8 @@
msgstr "Piede della tabella"

#: controlTypes.py:217
-#: virtualBuffers_old\adobe.py:37
-#: virtualBuffers_old\gecko.py:42
+#: virtualBuffers_old\adobe.py:38
+#: virtualBuffers_old\gecko.py:43
msgid "document"
msgstr "Documento"

@@ -1459,14 +1452,14 @@
msgstr "Colore di sfondo"

#: controlTypes.py:296
-#: textBuffer.py:286
-#: textBuffer.py:293
-#: textBuffer.py:323
+#: textBuffer.py:287
+#: textBuffer.py:294
+#: textBuffer.py:324
msgid "superscript"
msgstr "Superscript"

#: controlTypes.py:297
-#: textBuffer.py:325
+#: textBuffer.py:326
msgid "subscript"
msgstr "Subscript"

@@ -1535,7 +1528,7 @@
msgstr "Sottomenu'"

#: controlTypes.py:319
-#: virtualBuffers_old\MSHTML.py:295
+#: virtualBuffers_old\MSHTML.py:299
msgid "protected"
msgstr "Protetto"

@@ -1587,30 +1580,30 @@
msgid "You can press insert+n to activate the NVDA menu at any time"
msgstr "Puoi premere in qualsiasi momento insert+n per attivare il menu' di nvda"

-#: cursorManager.py:77
-#: virtualBuffers_old\__init__.py:459
+#: cursorManager.py:78
+#: virtualBuffers_old\__init__.py:460
msgid "Find"
msgstr "Trova"

-#: cursorManager.py:77
-#: virtualBuffers_old\__init__.py:459
+#: cursorManager.py:78
+#: virtualBuffers_old\__init__.py:460
msgid "Type the text you wish to find"
msgstr "Digita il testo che vuoi cercare"

-#: cursorManager.py:96
+#: cursorManager.py:97
msgid "text \"%s\" not found"
msgstr "Testo: \"%s\" non trovato"

-#: cursorManager.py:96
-#: virtualBuffers_old\__init__.py:469
+#: cursorManager.py:97
+#: virtualBuffers_old\__init__.py:470
msgid "Find Error"
msgstr "Errore di ricerca"

-#: cursorManager.py:103
+#: cursorManager.py:104
msgid "find a text string from the current cursor position"
msgstr "Trova un testo dalla posizione del cursore"

-#: cursorManager.py:110
+#: cursorManager.py:111
msgid "find the next occurrence of the previously entered text string from the current cursor's position"
msgstr "Trova un testo dalla posizione del cursore"

@@ -2029,151 +2022,155 @@
msgstr "&Numero di righe per pagina"

#: gui\settingsDialogs.py:473
+msgid "Use &screen layout (when supported)"
+msgstr "Usa il layout dello&schermo (quando supportato)"
+
+#: gui\settingsDialogs.py:477
msgid "Report &virtual presentation on focus changes"
msgstr "Leggi la presentazione &virtuale quando cambia il focus"

-#: gui\settingsDialogs.py:476
+#: gui\settingsDialogs.py:480
msgid "Update the content &dynamically"
msgstr "Aggiorna il contenuto &dinamico"

-#: gui\settingsDialogs.py:479
+#: gui\settingsDialogs.py:483
msgid "Report lin&ks"
msgstr "Leggi i lin&ks"

-#: gui\settingsDialogs.py:482
+#: gui\settingsDialogs.py:486
msgid "Report &lists"
msgstr "Leggi gli &elenchi"

-#: gui\settingsDialogs.py:485
+#: gui\settingsDialogs.py:489
msgid "Report list &items"
msgstr "Leggi gli &elementi di elenco"

-#: gui\settingsDialogs.py:488
+#: gui\settingsDialogs.py:492
msgid "Report &headings"
msgstr "Leggi le &intestazioni"

-#: gui\settingsDialogs.py:491
-#: gui\settingsDialogs.py:570
+#: gui\settingsDialogs.py:495
+#: gui\settingsDialogs.py:575
msgid "Report &tables"
msgstr "Leggi le &tabelle"

-#: gui\settingsDialogs.py:494
+#: gui\settingsDialogs.py:498
msgid "Report &graphics"
msgstr "Leggi i &grafici"

-#: gui\settingsDialogs.py:497
+#: gui\settingsDialogs.py:501
msgid "Report f&orms"
msgstr "Leggi i f&orm"

-#: gui\settingsDialogs.py:500
+#: gui\settingsDialogs.py:504
msgid "Report form &fields"
msgstr "Leggi i &campi del form"

-#: gui\settingsDialogs.py:503
+#: gui\settingsDialogs.py:507
msgid "Report block &quotes"
msgstr "Leggi i blocchi tra &virgolette"

-#: gui\settingsDialogs.py:506
+#: gui\settingsDialogs.py:510
msgid "Report &paragraphs"
msgstr "Leggi i &paragrafi"

-#: gui\settingsDialogs.py:509
+#: gui\settingsDialogs.py:513
msgid "Report f&rames"
msgstr "Leggi i f&rame"

-#: gui\settingsDialogs.py:546
+#: gui\settingsDialogs.py:551
msgid "Document formatting"
msgstr "Formattazione documento"

-#: gui\settingsDialogs.py:549
+#: gui\settingsDialogs.py:554
msgid "Announce formatting changes after the cursor (can cause a lag)"
msgstr "Leggi i cambiamenti di formattazione dopo il cursore (puo' causare un ritardo)"

-#: gui\settingsDialogs.py:552
+#: gui\settingsDialogs.py:557
msgid "Report font &name"
msgstr "Leggi il &nome del font"

-#: gui\settingsDialogs.py:555
+#: gui\settingsDialogs.py:560
msgid "Report font &size"
msgstr "Leggi la &dimensione del font"

-#: gui\settingsDialogs.py:558
+#: gui\settingsDialogs.py:563
msgid "Report font attri&butes"
msgstr "Leggi gli attri&buti del font"

-#: gui\settingsDialogs.py:561
+#: gui\settingsDialogs.py:566
msgid "Report st&yle"
msgstr "Leggi lo st&ile"

-#: gui\settingsDialogs.py:564
+#: gui\settingsDialogs.py:569
msgid "Report &pages"
msgstr "Leggi le &pagine"

-#: gui\settingsDialogs.py:567
+#: gui\settingsDialogs.py:572
msgid "Report &line numbers"
msgstr "Leggi i numeri di &riga"

-#: gui\settingsDialogs.py:573
+#: gui\settingsDialogs.py:578
msgid "Report &alignment"
msgstr "Leggi &l'allineamento"

-#: gui\settingsDialogs.py:595
+#: gui\settingsDialogs.py:600
msgid "Edit dictionary entry"
msgstr "Modifica una voce"

-#: gui\settingsDialogs.py:598
+#: gui\settingsDialogs.py:603
msgid "&Pattern"
msgstr "&Voce"

-#: gui\settingsDialogs.py:601
+#: gui\settingsDialogs.py:606
msgid "&Replacement"
msgstr "&Voce in sostituzione"

-#: gui\settingsDialogs.py:604
+#: gui\settingsDialogs.py:609
msgid "&Comment"
msgstr "&Commento"

-#: gui\settingsDialogs.py:607
+#: gui\settingsDialogs.py:612
msgid "Case &sensitive"
msgstr "Distingui tra &maiuscole e minuscole"

-#: gui\settingsDialogs.py:609
+#: gui\settingsDialogs.py:614
msgid "Regular &expression"
msgstr "Espressione &regolare"

-#: gui\settingsDialogs.py:631
+#: gui\settingsDialogs.py:636
msgid "&Dictionary entries"
msgstr "Voci del &dizionario"

-#: gui\settingsDialogs.py:634
+#: gui\settingsDialogs.py:639
msgid "Comment"
msgstr "Commento"

-#: gui\settingsDialogs.py:635
+#: gui\settingsDialogs.py:640
msgid "Pattern"
msgstr "Voce"

-#: gui\settingsDialogs.py:636
+#: gui\settingsDialogs.py:641
msgid "Replacement"
msgstr "Voce in sostituzione"

-#: gui\settingsDialogs.py:637
+#: gui\settingsDialogs.py:642
msgid "case sensitive"
msgstr "Distingui tra maiuscole e minuscole"

-#: gui\settingsDialogs.py:638
+#: gui\settingsDialogs.py:643
msgid "Regular expression"
msgstr "Espressione Regolare"

-#: gui\settingsDialogs.py:645
+#: gui\settingsDialogs.py:650
msgid "&Add"
msgstr "&Aggiungi"

-#: gui\settingsDialogs.py:648
+#: gui\settingsDialogs.py:653
msgid "&edit"
msgstr "&Modifica"

-#: gui\settingsDialogs.py:651
+#: gui\settingsDialogs.py:656
msgid "&Remove"
msgstr "&Rimuovi"

@@ -2231,20 +2228,20 @@
msgstr "Fuori di"

#: speech.py:412
-#: textBuffer.py:544
-#: textBuffer.py:546
-#: textBuffer.py:550
+#: textBuffer.py:545
+#: textBuffer.py:547
+#: textBuffer.py:551
msgid "unselected %s"
msgstr "Non selezionato %s"

#: speech.py:684
-#: virtualBuffers_old\MSHTML.py:123
-#: virtualBuffers_old\MSHTML.py:302
-#: virtualBuffers_old\MSHTML.py:306
-#: virtualBuffers_old\adobe.py:300
-#: virtualBuffers_old\adobe.py:304
-#: virtualBuffers_old\gecko.py:293
-#: virtualBuffers_old\gecko.py:297
+#: virtualBuffers_old\MSHTML.py:125
+#: virtualBuffers_old\MSHTML.py:307
+#: virtualBuffers_old\MSHTML.py:311
+#: virtualBuffers_old\adobe.py:303
+#: virtualBuffers_old\adobe.py:307
+#: virtualBuffers_old\gecko.py:296
+#: virtualBuffers_old\gecko.py:300
msgid "not %s"
msgstr "Non %s"

@@ -2256,109 +2253,109 @@
msgid "No speech, a template synthesizer"
msgstr "Sintesi disattivata"

-#: textBuffer.py:206
+#: textBuffer.py:207
msgid "page %d"
msgstr "Pagina %d"

-#: textBuffer.py:212
+#: textBuffer.py:213
msgid "line %d"
msgstr "Riga %d"

-#: textBuffer.py:218
+#: textBuffer.py:219
msgid "out of table"
msgstr "Fuori dalla tabella"

-#: textBuffer.py:224
+#: textBuffer.py:225
msgid "table with %d columns and %d rows"
msgstr "Tabella con %d colonne e %d righe"

-#: textBuffer.py:230
+#: textBuffer.py:231
msgid "row %d"
msgstr "Riga %d"

-#: textBuffer.py:235
+#: textBuffer.py:236
msgid "column %d"
msgstr "Colonna %d"

-#: textBuffer.py:241
-#: textBuffer.py:309
+#: textBuffer.py:242
+#: textBuffer.py:310
msgid "style %s"
msgstr "Stile %s"

-#: textBuffer.py:247
-#: textBuffer.py:311
+#: textBuffer.py:248
+#: textBuffer.py:312
msgid "alignment %s"
msgstr "Allineamento %s"

-#: textBuffer.py:253
-#: textBuffer.py:313
+#: textBuffer.py:254
+#: textBuffer.py:314
msgid "font name %s"
msgstr "Nome font %s"

-#: textBuffer.py:259
-#: textBuffer.py:315
+#: textBuffer.py:260
+#: textBuffer.py:316
msgid "font size %d"
msgstr "Dimensione font %d"

-#: textBuffer.py:267
+#: textBuffer.py:268
msgid "not bold"
msgstr "Non grassetto"

-#: textBuffer.py:274
+#: textBuffer.py:275
msgid "not italic"
msgstr "Non corsivo"

-#: textBuffer.py:281
+#: textBuffer.py:282
msgid "not underline"
msgstr "Non sottolineato"

-#: textBuffer.py:288
+#: textBuffer.py:289
msgid "not superscript"
msgstr "Non superscript"

-#: textBuffer.py:295
+#: textBuffer.py:296
msgid "not subscript"
msgstr "Non subscript"

-#: textBuffer.py:469
-#: textBuffer.py:497
-#: textBuffer.py:505
+#: textBuffer.py:470
+#: textBuffer.py:498
+#: textBuffer.py:506
msgid "Moves and then reads the current line"
msgstr "Si sposta e legge la riga corrente"

-#: textBuffer.py:473
+#: textBuffer.py:474
msgid "reads the current line"
msgstr "Legge la riga corrente"

-#: textBuffer.py:481
+#: textBuffer.py:482
msgid "Moves and reads the current character"
msgstr "Si sposta e legge il carattere corrente"

-#: textBuffer.py:489
+#: textBuffer.py:490
msgid "Moves and reads the current word"
msgstr "Si sposta e legge la parola corrente"

-#: textBuffer.py:513
+#: textBuffer.py:514
msgid "Manually moves to the next paragraph and then speaks it"
msgstr "Si sposta al paragrafo successivo e lo legge"

-#: textBuffer.py:521
+#: textBuffer.py:522
msgid "Manually moves to the previous paragraph and then speaks it"
msgstr "Si sposta al paragrafo precedente e lo legge"

-#: textBuffer.py:533
+#: textBuffer.py:534
msgid "no selections"
msgstr "Nessuna selezione"

-#: textBuffer.py:552
+#: textBuffer.py:553
msgid "Moves and reads the current selection"
msgstr "Si sposta e legge la selezione attuale"

-#: textBuffer.py:558
+#: textBuffer.py:559
msgid "Deletes the character and reads the new current character"
msgstr "Cancella il carattere e legge il nuovo carattere attuale"

-#: textBuffer.py:572
+#: textBuffer.py:573
msgid "Reads the character before the current character and then deletes it"
msgstr "Legge il carattere prima di quello attuale e lo cancella"

@@ -2384,298 +2381,302 @@
"http://www.gnu.org/licenses/gpl.html\n"
"o leggete il file copying.txt distribuito con questo software."

-#: virtualBuffers\__init__.py:87
-#: virtualBuffers\__init__.py:91
-#: virtualBuffers\__init__.py:95
-#: virtualBuffers\__init__.py:101
-#: virtualBuffers\__init__.py:105
-#: virtualBuffers_old\__init__.py:190
+#: virtualBufferHandler.py:78
+msgid "virtual buffer pass through"
+msgstr "Passa attraverso il buffer virtuale"
+
+#: virtualBuffers\__init__.py:89
+#: virtualBuffers\__init__.py:93
+#: virtualBuffers\__init__.py:97
+#: virtualBuffers\__init__.py:103
+#: virtualBuffers\__init__.py:107
+#: virtualBuffers_old\__init__.py:191
msgid "out of %s"
msgstr "Fuori di %s"

-#: virtualBuffers\__init__.py:89
-#: virtualBuffers_old\MSHTML.py:247
-#: virtualBuffers_old\MSHTML.py:250
-#: virtualBuffers_old\MSHTML.py:257
-#: virtualBuffers_old\adobe.py:257
-#: virtualBuffers_old\adobe.py:268
-#: virtualBuffers_old\gecko.py:250
-#: virtualBuffers_old\gecko.py:261
+#: virtualBuffers\__init__.py:91
+#: virtualBuffers_old\MSHTML.py:251
+#: virtualBuffers_old\MSHTML.py:254
+#: virtualBuffers_old\MSHTML.py:261
+#: virtualBuffers_old\adobe.py:260
+#: virtualBuffers_old\adobe.py:271
+#: virtualBuffers_old\gecko.py:253
+#: virtualBuffers_old\gecko.py:264
msgid "with %s items"
msgstr "Con %s elementi"

-#: virtualBuffers\__init__.py:103
+#: virtualBuffers\__init__.py:105
msgid "in %s"
msgstr "In %s"

-#: virtualBuffers\__init__.py:177
-#: virtualBuffers_old\__init__.py:290
+#: virtualBuffers\__init__.py:178
+#: virtualBuffers_old\__init__.py:291
msgid "activates the current object in the virtual buffer"
msgstr "Attiva l'oggetto attuale nel buffer virtuale"

-#: virtualBuffers\__init__.py:196
+#: virtualBuffers\__init__.py:197
msgid "Refreshed"
msgstr "Aggiornato"

-#: virtualBuffers\__init__.py:201
+#: virtualBuffers\__init__.py:202
msgid "use screen layout %s"
msgstr "Usa il layout dello schermo %s"

-#: virtualBuffers\__init__.py:243
+#: virtualBuffers\__init__.py:244
msgid "no next heading"
msgstr "Nessuna intestazione successiva"

-#: virtualBuffers\__init__.py:244
-#: virtualBuffers_old\__init__.py:313
+#: virtualBuffers\__init__.py:245
+#: virtualBuffers_old\__init__.py:314
msgid "moves to the next heading"
msgstr "Vai all'intestazione successiva"

-#: virtualBuffers\__init__.py:250
+#: virtualBuffers\__init__.py:251
msgid "no previous heading"
msgstr "Nessuna intestazione precedente"

-#: virtualBuffers\__init__.py:251
-#: virtualBuffers_old\__init__.py:324
+#: virtualBuffers\__init__.py:252
+#: virtualBuffers_old\__init__.py:325
msgid "moves to the previous heading"
msgstr "Vai all'intestazione precedente"

-#: virtualBuffers\__init__.py:257
+#: virtualBuffers\__init__.py:258
msgid "no next table"
msgstr "Nessuna tabella successiva"

-#: virtualBuffers\__init__.py:258
-#: virtualBuffers_old\__init__.py:357
+#: virtualBuffers\__init__.py:259
+#: virtualBuffers_old\__init__.py:358
msgid "moves to the next table"
msgstr "Vai alla tabella successiva"

-#: virtualBuffers\__init__.py:264
+#: virtualBuffers\__init__.py:265
msgid "no previous table"
msgstr "Nessina tabella precedente"

-#: virtualBuffers\__init__.py:265
-#: virtualBuffers_old\__init__.py:368
+#: virtualBuffers\__init__.py:266
+#: virtualBuffers_old\__init__.py:369
msgid "moves to the previous table"
msgstr "Vai alla tabella precedente"

-#: virtualBuffers\__init__.py:271
+#: virtualBuffers\__init__.py:272
msgid "no next link"
msgstr "Nessun link successivo"

-#: virtualBuffers\__init__.py:272
-#: virtualBuffers_old\__init__.py:379
+#: virtualBuffers\__init__.py:273
+#: virtualBuffers_old\__init__.py:380
msgid "moves to the next link"
msgstr "Vai al link successivo"

-#: virtualBuffers\__init__.py:278
+#: virtualBuffers\__init__.py:279
msgid "no previous link"
msgstr "Nessun link precedente"

-#: virtualBuffers\__init__.py:279
-#: virtualBuffers_old\__init__.py:390
+#: virtualBuffers\__init__.py:280
+#: virtualBuffers_old\__init__.py:391
msgid "moves to the previous link"
msgstr "Vai al link precedente"

-#: virtualBuffers\__init__.py:285
+#: virtualBuffers\__init__.py:286
msgid "no next visited link"
msgstr "Nessun link visitato successivo\""

-#: virtualBuffers\__init__.py:286
+#: virtualBuffers\__init__.py:287
msgid "moves to the next visited link"
msgstr "Vai al link visitato successivo"

-#: virtualBuffers\__init__.py:292
+#: virtualBuffers\__init__.py:293
msgid "no previous visited link"
msgstr "Nessun link visitato precedente"

-#: virtualBuffers\__init__.py:293
+#: virtualBuffers\__init__.py:294
msgid "moves to the previous visited link"
msgstr "Vai al link visitato precedente"

-#: virtualBuffers\__init__.py:299
+#: virtualBuffers\__init__.py:300
msgid "no next unvisited link"
msgstr "Nessun link non visitato successivo"

-#: virtualBuffers\__init__.py:300
+#: virtualBuffers\__init__.py:301
msgid "moves to the next unvisited link"
msgstr "Vai al link non visitato successivo"

-#: virtualBuffers\__init__.py:306
+#: virtualBuffers\__init__.py:307
msgid "no previous unvisited link"
msgstr "Nessun link non visitato precedente"

-#: virtualBuffers\__init__.py:307
+#: virtualBuffers\__init__.py:308
msgid "moves to the previous unvisited link"
msgstr "Vai al link non visitato precedente"

-#: virtualBuffers\__init__.py:313
+#: virtualBuffers\__init__.py:314
msgid "no next form field"
msgstr "Nessun campo del form successivo"

-#: virtualBuffers\__init__.py:314
-#: virtualBuffers\__init__.py:321
+#: virtualBuffers\__init__.py:315
+#: virtualBuffers\__init__.py:322
msgid "moves to the next form field"
msgstr "Vai al campo del form successivo"

-#: virtualBuffers\__init__.py:320
+#: virtualBuffers\__init__.py:321
msgid "no previous form field"
msgstr "Nessun campo del form precedente"

-#: virtualBuffers\__init__.py:356
+#: virtualBuffers\__init__.py:357
msgid "displays a list of links"
msgstr "Visualizza un elenco di links"

-#: virtualBuffers_old\MSHTML.py:144
-#: virtualBuffers_old\adobe.py:170
-#: virtualBuffers_old\gecko.py:168
+#: virtualBuffers_old\MSHTML.py:148
+#: virtualBuffers_old\adobe.py:173
+#: virtualBuffers_old\gecko.py:171
msgid "loading document %s"
msgstr "Sto' caricando il documento %s"

-#: virtualBuffers_old\MSHTML.py:152
-#: virtualBuffers_old\adobe.py:179
-#: virtualBuffers_old\gecko.py:177
+#: virtualBuffers_old\MSHTML.py:156
+#: virtualBuffers_old\adobe.py:182
+#: virtualBuffers_old\gecko.py:180
msgid "done"
msgstr "Fatto"

-#: virtualBuffers_old\MSHTML.py:256
-#: virtualBuffers_old\MSHTML.py:263
-#: virtualBuffers_old\adobe.py:267
-#: virtualBuffers_old\adobe.py:280
-#: virtualBuffers_old\gecko.py:260
-#: virtualBuffers_old\gecko.py:273
+#: virtualBuffers_old\MSHTML.py:260
+#: virtualBuffers_old\MSHTML.py:267
+#: virtualBuffers_old\adobe.py:270
+#: virtualBuffers_old\adobe.py:283
+#: virtualBuffers_old\gecko.py:263
+#: virtualBuffers_old\gecko.py:276
msgid "definition"
msgstr "Definizione"

-#: virtualBuffers_old\MSHTML.py:291
+#: virtualBuffers_old\MSHTML.py:295
msgid "file upload"
msgstr "Upload file"

-#: virtualBuffers_old\MSHTML.py:324
+#: virtualBuffers_old\MSHTML.py:329
msgid "clickable"
msgstr "Cliccabile"

-#: virtualBuffers_old\__init__.py:271
+#: virtualBuffers_old\__init__.py:272
msgid "moves one page up in the virtual buffer's current document"
msgstr "Si sposta di una pagina su nel buffer virtuale del documento corrente"

-#: virtualBuffers_old\__init__.py:286
+#: virtualBuffers_old\__init__.py:287
msgid "moves one page down in the virtual buffer's current document"
msgstr "Si sposta di una pagina giu' nel buffer virtuale del documento corrente"

-#: virtualBuffers_old\__init__.py:312
-#: virtualBuffers_old\__init__.py:323
+#: virtualBuffers_old\__init__.py:313
+#: virtualBuffers_old\__init__.py:324
msgid "no more headings"
msgstr "Non ci sono piu' intestazioni"

-#: virtualBuffers_old\__init__.py:334
-#: virtualBuffers_old\__init__.py:345
+#: virtualBuffers_old\__init__.py:335
+#: virtualBuffers_old\__init__.py:346
msgid "no more paragraphs"
msgstr "Non ci sono piu' paragrafi"

-#: virtualBuffers_old\__init__.py:335
+#: virtualBuffers_old\__init__.py:336
msgid "moves to the next paragraph"
msgstr "Vai al paragrafo successivo"

-#: virtualBuffers_old\__init__.py:346
+#: virtualBuffers_old\__init__.py:347
msgid "moves to the previous paragraph"
msgstr "Vai al paragrafo precedente"

-#: virtualBuffers_old\__init__.py:356
-#: virtualBuffers_old\__init__.py:367
+#: virtualBuffers_old\__init__.py:357
+#: virtualBuffers_old\__init__.py:368
msgid "no more tables"
msgstr "Non ci sono piu' tabelle"

-#: virtualBuffers_old\__init__.py:378
-#: virtualBuffers_old\__init__.py:389
+#: virtualBuffers_old\__init__.py:379
+#: virtualBuffers_old\__init__.py:390
msgid "no more links"
msgstr "Non ci sono piu' links"

-#: virtualBuffers_old\__init__.py:400
-#: virtualBuffers_old\__init__.py:411
+#: virtualBuffers_old\__init__.py:401
+#: virtualBuffers_old\__init__.py:412
msgid "no more lists"
msgstr "Non ci sono piu' elenchi"

-#: virtualBuffers_old\__init__.py:401
+#: virtualBuffers_old\__init__.py:402
msgid "moves to the next list"
msgstr "Vai all'elenco successivo"

-#: virtualBuffers_old\__init__.py:412
+#: virtualBuffers_old\__init__.py:413
msgid "moves to the previous list"
msgstr "Vai all'elenco precedente"

-#: virtualBuffers_old\__init__.py:422
-#: virtualBuffers_old\__init__.py:433
+#: virtualBuffers_old\__init__.py:423
+#: virtualBuffers_old\__init__.py:434
msgid "no more list items"
msgstr "Non ci sono piu' elementi di elenco"

-#: virtualBuffers_old\__init__.py:423
+#: virtualBuffers_old\__init__.py:424
msgid "moves to the next list item"
msgstr "Vai all'elemento di elenco successivo"

-#: virtualBuffers_old\__init__.py:434
+#: virtualBuffers_old\__init__.py:435
msgid "moves to the previous list item"
msgstr "Vai all'elemento di elenco precedente"

-#: virtualBuffers_old\__init__.py:444
-#: virtualBuffers_old\__init__.py:455
+#: virtualBuffers_old\__init__.py:445
+#: virtualBuffers_old\__init__.py:456
msgid "no more form fields"
msgstr "Non ci sono piu' campi del form"

-#: virtualBuffers_old\__init__.py:445
+#: virtualBuffers_old\__init__.py:446
msgid "Moves to the next form field"
msgstr "Vai al campo del form successivo"

-#: virtualBuffers_old\__init__.py:456
+#: virtualBuffers_old\__init__.py:457
msgid "moves to the previous form field"
msgstr "Vai al campo del form precedente"

-#: virtualBuffers_old\__init__.py:469
+#: virtualBuffers_old\__init__.py:470
msgid "text: \"%s\" not found"
msgstr "Testo: \"%s\" non trovato"

-#: virtualBuffers_old\__init__.py:475
+#: virtualBuffers_old\__init__.py:476
msgid "find a text pattern from the current cursor's position"
msgstr "Trova un testo dalla posizione del cursore"

-#: virtualBuffers_old\__init__.py:479
+#: virtualBuffers_old\__init__.py:480
msgid "find next occurrence of text"
msgstr "Trova l'occorrenza del testo successiva"

-#: virtualBuffers_old\__init__.py:498
#: virtualBuffers_old\__init__.py:499
+#: virtualBuffers_old\__init__.py:500
msgid "h=headingQuickKey"
msgstr "H=tasto rapido intestazione"

-#: virtualBuffers_old\__init__.py:500
#: virtualBuffers_old\__init__.py:501
+#: virtualBuffers_old\__init__.py:502
msgid "f=formFieldQuickKey"
msgstr "F=tasto rapido campo del form"

-#: virtualBuffers_old\__init__.py:502
#: virtualBuffers_old\__init__.py:503
+#: virtualBuffers_old\__init__.py:504
msgid "p=paragraphQuickKey"
msgstr "P=tasto rapido paragrafo"

-#: virtualBuffers_old\__init__.py:504
#: virtualBuffers_old\__init__.py:505
+#: virtualBuffers_old\__init__.py:506
msgid "t=tableQuickKey"
msgstr "T=tasto rapido tabella"

-#: virtualBuffers_old\__init__.py:506
#: virtualBuffers_old\__init__.py:507
+#: virtualBuffers_old\__init__.py:508
msgid "k=linkQuickKey"
msgstr "K=tasto rapido link"

-#: virtualBuffers_old\__init__.py:508
#: virtualBuffers_old\__init__.py:509
+#: virtualBuffers_old\__init__.py:510
msgid "l=listQuickKey"
msgstr "L=tasto rapido elenco"

-#: virtualBuffers_old\__init__.py:510
#: virtualBuffers_old\__init__.py:511
+#: virtualBuffers_old\__init__.py:512
msgid "i=listItemQuickKey"
msgstr "I=tasto rapido elemento di elenco"

-#: virtualBuffers_old\adobe.py:312
+#: virtualBuffers_old\adobe.py:315
msgid "protected %s"
msgstr "Protetto %s"

Problems with list archives, was Re: NVDA project services now back to normal

"Cleverson" <clever92000@...>
 

Jamie,

I tried to access the list archives from the NVDA-dev info page. The
link named "Nvda-dev Archives" is pointing to the following address:
http://lists.nvaccess.org/pipermail/nvda-dev/

When I enter this link, I am presented to a page named "Index of
/pipermail/nvda-dev".

to enter the archives, I have to locate the link "index.html" that
points to:
http://lists.nvaccess.org/pipermail/nvda-dev/index.html

I suggest the "Nvda-dev Archives" link at Nvda-dev info page to
point straight to this index.html file.

In addition, the archives prior to March 31 are missing.

Cheers,
Cleverson

-----Mensagem original-----
De: James Teh <jamie@...8...>
Para: NVDA mailing list <nvda@...10...>,NVDA development mailing list <nvda-dev@...2...>
Data: Quinta, 03 de Abril de 2008 12:36
Assunto: [Nvda-dev] NVDA project services now back to normal

Hi all,

As you know, we've moved all services for nvda-project.org and
nvaccess.org to a new server. Hopefully, this should be a lot more
reliable than our previous host; we were experiencing massive amounts of
downtime and services were extremely slow far too often. So far, the new
server is working well. Unfortunately, the transition was a little
bumpier than expected:
* The initial domain transfer was broken and probably caused
nvda-project.org to disappear for a while for some users.
* We had to move to another server less than a day after the initial
move, causing more downtime and delays.
* Sending email to the nvda-dev list would have been bouncing for some
users. I only discovered this issue this morning when I tried to send an
email to the list. :)
* Trac login and registration was broken.
* Subversion commit emails were not being sent to nvda-dev.

All of these issues should now be fixed. We apologise for the
inconvenience during the transition. However, now that it is done,
services will hopefully be much more reliable henceforth.

Jamie

--
James Teh
Email: jamie@...8...
WWW: http://www.jantrid.net/
MSN Messenger: jamie@...8...
Jabber: jteh@...9...
Yahoo: jcs_teh



_______________________________________________
Nvda-dev mailing list
Nvda-dev@...2...
http://lists.nvaccess.org/listinfo/nvda-dev

Re: NVDA project services now back to normal

"Cleverson" <clever92000@...>
 

I forgot to say that I was in vacation mode and now it is reset to
normal mode. I'm going to change it again right now, but I'd like you
to know it because other users may have been affected as well.

Cleverson

-----Mensagem original-----
De: James Teh <jamie@...8...>
Para: NVDA mailing list <nvda@...10...>,NVDA development mailing list <nvda-dev@...2...>
Data: Quinta, 03 de Abril de 2008 12:36
Assunto: [Nvda-dev] NVDA project services now back to normal

Hi all,

As you know, we've moved all services for nvda-project.org and
nvaccess.org to a new server. Hopefully, this should be a lot more
reliable than our previous host; we were experiencing massive amounts of
downtime and services were extremely slow far too often. So far, the new
server is working well. Unfortunately, the transition was a little
bumpier than expected:
* The initial domain transfer was broken and probably caused
nvda-project.org to disappear for a while for some users.
* We had to move to another server less than a day after the initial
move, causing more downtime and delays.
* Sending email to the nvda-dev list would have been bouncing for some
users. I only discovered this issue this morning when I tried to send an
email to the list. :)
* Trac login and registration was broken.
* Subversion commit emails were not being sent to nvda-dev.

All of these issues should now be fixed. We apologise for the
inconvenience during the transition. However, now that it is done,
services will hopefully be much more reliable henceforth.

Jamie

--
James Teh
Email: jamie@...8...
WWW: http://www.jantrid.net/
MSN Messenger: jamie@...8...
Jabber: jteh@...9...
Yahoo: jcs_teh



_______________________________________________
Nvda-dev mailing list
Nvda-dev@...2...
http://lists.nvaccess.org/listinfo/nvda-dev

Re: Problems with list archives, was Re: NVDA project services now back to normal

James Teh <jamie@...>
 

Cleverson wrote:
I tried to access the list archives from the NVDA-dev info page. The
link named "Nvda-dev Archives" is pointing to the following address:
http://lists.nvaccess.org/pipermail/nvda-dev/
When I enter this link, I am presented to a page named "Index of
/pipermail/nvda-dev".
Oops. Sorry about that - now fixed.

In addition, the archives prior to March 31 are missing.
It is probably going to be quite difficult to transfer the archives from our old host, as we don't have direct access to the files. If this is very much desired, we might be able to arrange something.

Jamie

--
James Teh
Email: jamie@...8...
WWW: http://www.jantrid.net/
MSN Messenger: jamie@...8...
Jabber: jteh@...9...
Yahoo: jcs_teh

commit r1883 - in trunk/source: . virtualBuffers

NVDA Subversion <svn@...>
 

Author: mdcurran
Date: Fri Apr 4 01:54:32 2008
New Revision: 1883

Log:
Again restructured the way virtualBuffers are loaded and unloaded.
*Unmerged the changes in r1872 -- that was a mistake to try using NVDA virtualBuffer objects more like managers.
*The Gecko IA2 virtualBuffer is a lot more picky when asked if its alive, or whether in fact it should be loaded. It now *must* have readOnly and not busy.
*Greatly simplified event_gainFocus and event_stateChange in the gecko ia2 virtualBuffer as it dos not have to deal with readOnly or busy states.
*Added support for IAccessible2's documentLoadComplete event. If the object the event is for does not have a virtualBuffer, or the virtualBuffer reports as not being alive, virtualBufferHandler.update is called for this object.
*To reflect changes in the virtualBuffer library, the base virtualBuffer's loadBuffer method now passes both a windowHandle and ID to VBufClient_createBuffer. Previously the virtualBuffer library only rendered from the root IAccessible in the given window. Now it will render from the exact object its told to (using both the window and ID). The base virtualBuffer object expects that it has two properties for this use: rootWindowHandle and rootID.
*The gecko ia2 virtualBuffer sets rootWindowhandle to rootNVDAObject's event_windowhandle if it exists and its not 0, or it just uses windowHandle. This fixes a few problems where completely the wrong window was being rendered (which may have looked like the old document was rendered rather than the new one when moving from page to page).
*virtualBufferHandler.update is much more picky when it sees if this object is possibly a gecko ia2 object. It must be ia2, it must be a document, it must have readOnly, it must not have busy, and it must have a windowClass of MozillaContentWindowClass. This hopefully stops the occasional rendering of toolbars and other junk with in documents.

!!!!!Please Note!!!!
New virtualBuffers for Firefox3 / Thunderbird 3 in this revision of trunk need Misc Bindary Dependencies with a date of April 4 2008 or later, as there has been a large change as buffers are now created with IDs, not just a windowHandle.
http://trac.nvda-project.org/wiki/MiscellaneousDependencies



Modified:
trunk/source/IAccessibleHandler.py
trunk/source/virtualBufferHandler.py
trunk/source/virtualBuffer_lib.py
trunk/source/virtualBuffers/__init__.py
trunk/source/virtualBuffers/gecko_ia2.py

Modified: trunk/source/IAccessibleHandler.py
==============================================================================
--- trunk/source/IAccessibleHandler.py (original)
+++ trunk/source/IAccessibleHandler.py Fri Apr 4 01:54:32 2008
@@ -602,7 +602,7 @@
winUser.EVENT_OBJECT_STATECHANGE:"stateChange",
winUser.EVENT_OBJECT_VALUECHANGE:"valueChange",
IA2_EVENT_TEXT_CARET_MOVED:"caret",
-IA2_EVENT_DOCUMENT_CONTENT_CHANGED:"reorder",
+IA2_EVENT_DOCUMENT_LOAD_COMPLETE:"documentLoadComplete",
}

def manageEvent(name,window,objectID,childID):
@@ -624,6 +624,11 @@
if obj==focusObject:
obj=focusObject
if obj:
+ if name=="documentLoadComplete" and (not obj.virtualBuffer or not obj.virtualBuffer.isAlive()):
+ import virtualBufferHandler
+ v=virtualBufferHandler.update(obj)
+ if v:
+ obj.virtualBuffer=v
eventHandler.manageEvent(name,obj)

def winEventCallback(handle,eventID,window,objectID,childID,threadID,timestamp):

Modified: trunk/source/virtualBufferHandler.py
==============================================================================
--- trunk/source/virtualBufferHandler.py (original)
+++ trunk/source/virtualBufferHandler.py Fri Apr 4 01:54:32 2008
@@ -32,7 +32,10 @@
states=obj.states
#Gecko with IAccessible2 support
if isinstance(obj,NVDAObjects.IAccessible.IA2.IA2) and windowClassName.startswith('Mozilla') and role==controlTypes.ROLE_DOCUMENT:
- classString="virtualBuffers.gecko_ia2.Gecko_ia2"
+ if controlTypes.STATE_READONLY in states and controlTypes.STATE_BUSY not in states and windowClassName=="MozillaContentWindowClass":
+ classString="virtualBuffers.gecko_ia2.Gecko_ia2"
+ else:
+ return
#Gecko only with IAccessible support
elif isinstance(obj,NVDAObjects.IAccessible.IAccessible) and windowClassName.startswith('Mozilla') and role==controlTypes.ROLE_DOCUMENT and controlTypes.STATE_READONLY in states:
classString="virtualBuffers_old.gecko.Gecko"
@@ -56,10 +59,11 @@
newClass=getattr(mod,classString)
globalVars.log.debug("virtualBuffers.IAccessible.update: adding %s at %s (%s)"%(newClass,obj.windowHandle,obj.windowClassName))
virtualBufferObject=newClass(obj)
- runningTable.add(virtualBufferObject)
- if hasattr(virtualBufferObject,'unloadBuffer'):
- virtualBufferObject.loadBuffer()
- return virtualBufferObject
+ if virtualBufferObject.isAlive():
+ runningTable.add(virtualBufferObject)
+ if hasattr(virtualBufferObject,'unloadBuffer'):
+ virtualBufferObject.loadBuffer()
+ return virtualBufferObject

def killVirtualBuffer(virtualBufferObject):
try:

Modified: trunk/source/virtualBuffer_lib.py
==============================================================================
--- trunk/source/virtualBuffer_lib.py (original)
+++ trunk/source/virtualBuffer_lib.py Fri Apr 4 01:54:32 2008
@@ -14,13 +14,15 @@
dll=cdll.virtualBuffer

def dllErrorCheck(res,func,args):
- if res<0:
+ if res<0 or (func==VBufClient_createBuffer and res==0):
raise RuntimeError("error in %s with args of %s, code %s"%(func.__name__,args,res))
+
return res

VBufClient_createBuffer=dll.VBufClient_createBuffer
VBufClient_createBuffer.errcheck=dllErrorCheck

+
VBufClient_destroyBuffer=dll.VBufClient_destroyBuffer
VBufClient_destroyBuffer.errcheck=dllErrorCheck


Modified: trunk/source/virtualBuffers/__init__.py
==============================================================================
--- trunk/source/virtualBuffers/__init__.py (original)
+++ trunk/source/virtualBuffers/__init__.py Fri Apr 4 01:54:32 2008
@@ -116,25 +116,26 @@
self.rootNVDAObject=rootNVDAObject
super(VirtualBuffer,self).__init__()
self.VBufHandle=None
- self.passThrough=True
+ self.passThrough=False
+ self.rootWindowHandle=self.rootNVDAObject.windowHandle
+ self.rootID=0

def loadBuffer(self):
- self.VBufHandle=VBufClient_createBuffer(self.rootNVDAObject.windowHandle,self.backendLibPath)
- self.passThrough=False
+ try:
+ self.VBufHandle=VBufClient_createBuffer(self.rootWindowHandle,self.rootID,self.backendLibPath)
+ except:
+ return virtualBufferHandler.killVirtualBuffer(self)
focusObject=api.getFocusObject()
- if focusObject==self.rootNVDAObject:
+ if self.isNVDAObjectInVirtualBuffer(focusObject):
+ speech.cancelSpeech()
if self.passThrough:
+ self.passThrough=False
virtualBufferHandler.reportPassThrough(self)
- speech.cancelSpeech()
- if controlTypes.STATE_BUSY in self.rootNVDAObject.states:
- speech.speakMessage(controlTypes.speechStateLabels[controlTypes.STATE_BUSY])
- return
info=self.makeTextInfo(textHandler.POSITION_FIRST)
sayAllHandler.readText(info,sayAllHandler.CURSOR_CARET)

def unloadBuffer(self):
if self.VBufHandle is not None:
- self.passThrough=True
VBufClient_destroyBuffer(self.VBufHandle)
self.VBufHandle=None


Modified: trunk/source/virtualBuffers/gecko_ia2.py
==============================================================================
--- trunk/source/virtualBuffers/gecko_ia2.py (original)
+++ trunk/source/virtualBuffers/gecko_ia2.py Fri Apr 4 01:54:32 2008
@@ -1,4 +1,3 @@
-import time
import ctypes
from . import VirtualBuffer, VirtualBufferTextInfo
from virtualBuffer_lib import *
@@ -49,19 +48,14 @@

def __init__(self,rootNVDAObject):
super(Gecko_ia2,self).__init__(rootNVDAObject,backendLibPath=u"VBufBackend_gecko_ia2.dll",TextInfo=Gecko_ia2_TextInfo)
-
- def _set_rootNVDAObject(self,obj):
- self._rootWindowHandle=obj.windowHandle
- self._rootUniqueID=obj.IAccessibleObject.uniqueID
- self._rootNVDAObject=obj
- self._rootTime=time.time()
-
- def _get_rootNVDAObject(self):
- curTime=time.time()
- if curTime-self._rootTime<0.25:
- self._rootNVDAObject=NVDAObjects.IAccessible.getNVDAObjectFromEvent(self._rootWindowHandle,IAccessibleHandler.OBJID_CLIENT,self._rootUniqueID)
- self._rootTime=curTime
- return self._rootNVDAObject
+ rootWindowHandle=getattr(self.rootNVDAObject,'event_windowHandle',0)
+ if not rootWindowHandle:
+ rootWindowHandle=self.rootNVDAObject.windowHandle
+ self.rootWindowHandle=rootWindowHandle
+ try:
+ self.rootID=self.rootNVDAObject.IAccessibleObject.uniqueID
+ except:
+ self.rootID=0

def isNVDAObjectInVirtualBuffer(self,obj):
#Special code to handle Mozilla combobox lists
@@ -85,10 +79,17 @@

def isAlive(self):
root=self.rootNVDAObject
- if root and winUser.isWindow(root.windowHandle) and controlTypes.STATE_DEFUNCT not in root.states and root.role!=controlTypes.ROLE_UNKNOWN:
- return True
- else:
+ if not root:
+ return False
+ states=root.states
+ if not winUser.isWindow(root.windowHandle) or controlTypes.STATE_DEFUNCT in states or controlTypes.STATE_READONLY not in states or controlTypes.STATE_BUSY in states:
return False
+ try:
+ if not NVDAObjects.IAccessible.getNVDAObjectFromEvent(root.windowHandle,IAccessibleHandler.OBJID_CLIENT,root.IAccessibleObject.uniqueID):
+ return False
+ except:
+ return False
+ return True

def event_focusEntered(self,obj,nextHandler):
pass
@@ -96,33 +97,33 @@
def event_gainFocus(self,obj,nextHandler):
if self._inFind:
return
- if not self.isAlive():
- return virtualBufferHandler.killVirtualBuffer(self)
api.setNavigatorObject(obj)
- states=self.rootNVDAObject.states
- if controlTypes.STATE_BUSY in states:
- speech.speakMessage(controlTypes.speechStateLabels[controlTypes.STATE_BUSY])
- if self.VBufHandle is not None and controlTypes.STATE_READONLY not in states:
- self.unloadBuffer()
+ if self.VBufHandle is None:
return nextHandler()
- elif self.VBufHandle is not None and controlTypes.STATE_READONLY not in states:
- return self.unloadBuffer()
- elif self.VBufHandle is None:
- self.loadBuffer()
+ if sayAllHandler.isRunning():
+ sayAllHandler.stop()
+ wasSayAll=True
+ else:
+ wasSayAll=False
if obj==self.rootNVDAObject:
- return speech.speakObjectProperties(obj,name=True)
+ speech.cancelSpeech()
+ speech.speakObjectProperties(obj,name=True,role=True)
+ info=self.makeTextInfo(textHandler.POSITION_FIRST)
+ sayAllHandler.readText(info,sayAllHandler.CURSOR_CARET)
+ return
if obj.role==controlTypes.ROLE_DOCUMENT:
return
- if self.VBufHandle is None:
- return nextHandler()
#We only want to update the caret and speak the field if we're not in the same one as before
oldInfo=self.makeTextInfo(textHandler.POSITION_CARET)
try:
oldDocHandle,oldID=VBufClient_getFieldIdentifierFromBufferOffset(self.VBufHandle,oldInfo._startOffset)
except:
oldDocHandle=oldID=0
- docHandle=obj.IAccessibleObject.windowHandle
- ID=obj.IAccessibleObject.uniqueID
+ try:
+ docHandle=obj.IAccessibleObject.windowHandle
+ ID=obj.IAccessibleObject.uniqueID
+ except:
+ return nextHandler()
if (docHandle!=oldDocHandle or ID!=oldID) and ID!=0:
try:
start,end=VBufClient_getBufferOffsetsFromFieldIdentifier(self.VBufHandle,docHandle,ID)
@@ -135,8 +136,7 @@
endToStart=newInfo.compareEndPoints(oldInfo,"endToStart")
endToEnd=newInfo.compareEndPoints(oldInfo,"endToEnd")
if (startToStart<0 and endToEnd>0) or (startToStart>0 and endToEnd<0) or endToStart<0 or startToEnd>0:
- if sayAllHandler.isRunning():
- speech.cancelSpeech()
+ speech.cancelSpeech()
speech.speakFormattedTextWithXML(newInfo.XMLContext,newInfo.XMLText,self,newInfo.getXMLFieldSpeech,reason=speech.REASON_FOCUS)
newInfo.collapse()
newInfo.updateCaret()
@@ -188,25 +188,9 @@

def event_stateChange(self,obj,nextHandler):
if not self.isAlive():
- return virtualBufferHandler.killVirtualBuffer(self)
- states=self.rootNVDAObject.states
- if controlTypes.STATE_BUSY in states:
- speech.speakMessage(controlTypes.speechStateLabels[controlTypes.STATE_BUSY])
- if self.VBufHandle is not None and controlTypes.STATE_READONLY not in states:
- self.unloadBuffer()
- return nextHandler()
- elif self.VBufHandle is not None and controlTypes.STATE_READONLY not in states:
- return self.unloadBuffer()
- elif self.VBufHandle is None:
- self.loadBuffer()
+ return virtualBufferHandler.killVirtualBuffer()
return nextHandler()

- def loadBuffer(self):
- states=self.rootNVDAObject.states
- if controlTypes.STATE_BUSY in states or controlTypes.STATE_READONLY not in states:
- return
- super(Gecko_ia2,self).loadBuffer()
-
def event_scrollingStart(self,obj,nextHandler):
if self.VBufHandle is None:
return nextHandler()

[NVDA] #57: NVDA virtual buffer navigation does not synchronize with onscreen focus

"NVDA Trac" <trac@...>
 

#57: NVDA virtual buffer navigation does not synchronize with onscreen focus
------------------------------------------------------+---------------------
Reporter: vtsaran | Owner: jteh
Type: defect | Status: new
Priority: major | Milestone:
Component: Virtual buffers | Version: trunk
Keywords: virtual buffer navigation onscreen focus | Blocking:
Blockedby: |
------------------------------------------------------+---------------------
Currently, NVDA virtual buffer navigation is not synchronized with
onscreen navitation such as tabbing from element to elemen or clicking the
element with a mouse.
Repro steps:
1. Load a web page with headings or other HTML elements that you can jump
to using NVDA's navigation keys.
2. Jump to one of the elements, e.g. the first heading on the page.
3. Now press the TAB key.
Current behavior:
NVDA focuses on the first element on the page.
Expected behavior:
NVDA should focus on the tabbable element which is immediately after the
one on which virtual cursor is located.

--
Ticket URL: <http://trac.nvda-project.org/index.fcgi/ticket/57>
NVDA <http://www.nvda-project.org/>
A free and open-source screen reader for Windows