Changeset 2498
- Timestamp:
- 11/13/08 05:49:59 (8 weeks ago)
- Location:
- trunk
- Files:
-
- 22 modified
-
. (modified) (3 props)
-
source/appModuleHandler.py (modified) (9 diffs)
-
source/appModules/_default.py (modified) (1 diff)
-
source/appModules/audacity.py (modified) (1 diff)
-
source/appModules/calc.py (modified) (1 diff)
-
source/appModules/dosvox.py (modified) (1 diff)
-
source/appModules/firefox.py (modified) (2 diffs)
-
source/appModules/miranda32.py (modified) (2 diffs)
-
source/appModules/mplayerc.py (modified) (1 diff)
-
source/appModules/msimn.py (modified) (2 diffs)
-
source/appModules/msnmsgr.py (modified) (2 diffs)
-
source/appModules/nvda.py (modified) (1 diff)
-
source/appModules/outlook.py (modified) (2 diffs)
-
source/appModules/skype.py (modified) (1 diff)
-
source/appModules/soffice.py (modified) (2 diffs)
-
source/appModules/thunderbird.py (modified) (2 diffs)
-
source/appModules/totalcmd.py (modified) (2 diffs)
-
source/appModules/winamp.py (modified) (2 diffs)
-
source/baseObject.py (modified) (1 diff)
-
source/eventHandler.py (modified) (1 diff)
-
source/gui/settingsDialogs.py (modified) (1 diff)
-
source/scriptHandler.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property bzr:revision-info
-
old new 1 timestamp: 2008-11-1 2 16:22:44.319999933 +01002 committer: Peter Vágner <peter.v@datagate.sk>1 timestamp: 2008-11-13 16:40:49.467999935 +1100 2 committer: Michael Curran <mick@kulgan.net> 3 3 properties: 4 branch-nick: main4 branch-nick: default
-
- Property bzr:revision-id:v3-list-QlpoOTFBWSZTWbrL2vUAAB1VgAAQABCAQDrrnqAgAFCgaaGRkxBoTIJ6mmaNRwhndFAoNhZjh_YY4a01fOg1ulgNNC2UrzPdXXEnDpX8XckU4UJC6y9r1A..
-
old new 267 267 2295 jamie@jantrid.net-20081112030302-5v0cz8up9xybol1i 268 268 2296 peter.v@datagate.sk-20081112152244-yxpiodwvl042ktaf 269 2297 mick@kulgan.net-20081113054049-kmiq89owi6y0b0bv
-
- Property bzr:file-ids
-
old new 1 source/locale/cs/LC_MESSAGES/nvda.po 792@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Flocale%2Fcs%2FLC_MESSAGES%2Fnvda.po 1 source/appModuleHandler.py 97@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModuleHandler.py 2 source/appModules/_default.py 92@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2F_default.py 3 source/appModules/audacity.py 1216@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Faudacity.py 4 source/appModules/calc.py 363@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fcalc.py 5 source/appModules/dosvox.py 2397@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fdosvox.py 6 source/appModules/firefox.py firefox.py-20080409115008-7r27cnprsh8y66ow-1 7 source/appModules/miranda32.py 1236@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fmiranda32.py 8 source/appModules/mplayerc.py 1633@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fmplayerc.py 9 source/appModules/msimn.py 354@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fmsimn.py 10 source/appModules/msnmsgr.py 564@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fmsnmsgr.py 11 source/appModules/nvda.py nvda.py-20080306082146-2y8yib3dfdftv11a-1 12 source/appModules/outlook.py 1063@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Foutlook.py 13 source/appModules/skype.py 1329@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fskype.py 14 source/appModules/soffice.py 981@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fsoffice.py 15 source/appModules/thunderbird.py thunderbird.py-20080516033845-htxz6c2wvmpmtnfi-1 16 source/appModules/totalcmd.py 2026@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Ftotalcmd.py 17 source/appModules/winamp.py 1059@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2Fwinamp.py 18 source/baseObject.py 378@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FbaseObject.py 19 source/eventHandler.py 378@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FeventHandler.py 20 source/gui/settingsDialogs.py 299@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Fgui%2FsettingsDialogs.py 21 source/scriptHandler.py 362@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FscriptHandler.py
-
- Property bzr:revision-info
-
trunk/source/appModuleHandler.py
r2416 r2498 14 14 """ 15 15 16 import itertools 16 17 import re 17 18 import ctypes … … 32 33 #Dictionary of processID:appModule paires used to hold the currently running modules 33 34 runningTable={} 34 #Variable to hold the active (focused) appModule35 activeModule=None36 #variable to hold the default appModule instance37 default=None38 35 #: The process ID of NVDA itself. 39 36 NVDAProcessID=None … … 111 108 return None 112 109 113 def getActiveModule():114 """Finds the appModule that is for the current foreground window.115 @returns: the active appModule116 @rtype: appModule117 """118 fg=winUser.getForegroundWindow()119 mod=getAppModuleFromWindow(fg)120 if log.isEnabledFor(log.DEBUG):121 log.debug("Using window %s (%s), got appModule %s"%(fg,winUser.getClassName(fg),mod))122 return mod123 124 110 def getAppModuleForNVDAObject(obj): 125 111 if not isinstance(obj,NVDAObjects.window.Window): … … 137 123 if not mod: 138 124 appName=getAppNameFromProcessID(processID) 139 modClass=fetchAppModuleClass(appName) 140 if modClass: 141 mod=modClass(processID,appName=appName) 142 if modClass!=AppModule: 143 log.info("Loaded appModule %s"%(mod.appName)) 144 loadKeyMap(mod.appName,mod) 125 mod=fetchAppModule(processID,appName) 126 if not mod: 127 mod=fetchAppModule(processID,appName,useDefault=True) 128 if not mod: 129 raise RuntimeError("error fetching default appModule") 145 130 runningTable[processID]=mod 146 131 return mod … … 159 144 getAppModuleFromProcessID(processID) 160 145 161 def loadKeyMap(appName,mod): 162 """Loads a key map in to the given appModule, with the given name. if the key map exists. It takes in to account what layout NVDA is currently set to. 163 @param appName: the application name 164 @type appName: str 165 @param mod: the appModule 166 @type mod: appModule 167 """ 168 layout=config.conf["keyboard"]["keyboardLayout"] 169 keyMapFileName=getKeyMapFileName(appName,layout) 170 if not keyMapFileName: 171 return False 172 keyMapFile=open(keyMapFileName,'r') 173 bindCount=0 174 #If the appModule already has a running keyMap, clear it 175 if '_keyMap' in mod.__dict__: 176 mod._keyMap={} 177 for line in (x for x in keyMapFile if not x.startswith('#') and not x.isspace()): 178 m=re_keyScript.match(line) 179 if m: 180 try: 181 mod.bindKey_runtime(m.group('key'),m.group('script')) 182 bindCount+=1 183 except: 184 log.error("error binding %s to %s in module %s"%(m.group('script'),m.group('key'),appName)) 185 log.debug("added %s bindings to module %s from file %s"%(bindCount,appName,keyMapFileName)) 186 return True 187 188 def fetchAppModuleClass(appName): 146 def fetchAppModule(processID,appName,useDefault=False): 189 147 """Returns an appModule found in the appModules directory, for the given application name. 190 It only returns the class, it must be initialized with a name and a window to actually be used. 148 @param processID: process ID for it to be associated with 149 @type processID: integer 191 150 @param appName: the application name for which an appModule should be found. 192 151 @type appName: str … … 195 154 """ 196 155 mod=None 156 friendlyAppName=appName 157 if useDefault: 158 appName='_default' 197 159 if moduleExists(appName): 198 160 try: 199 mod=__import__(appName,globals(),locals(),[]).AppModule 161 mod=__import__(appName,globals(),locals(),[]).AppModule(processID,friendlyAppName) 200 162 except: 201 log.error(" Error in appModule %s"%appName,exc_info=True)163 log.error("error in appModule %s"%appName,exc_info=True) 202 164 speech.speakMessage(_("Error in appModule %s")%appName) 203 raise RuntimeError204 if mod is None:205 return AppModule206 return mod 165 if mod and isinstance(mod,AppModule): 166 mod.loadKeyMap() 167 return mod 168 207 169 208 170 def initialize(): … … 211 173 global NVDAProcessID,default 212 174 NVDAProcessID=os.getpid() 213 defaultModClass=fetchAppModuleClass('_default')214 if defaultModClass:215 default=defaultModClass('_default',winUser.getDesktopWindow())216 if default:217 if loadKeyMap('_default',default):218 log.info("loaded default appModule")219 else:220 speech.speakMessage(_("Could not load default module keyMap"))221 raise RuntimeError("appModuleHandler.initialize: could not load default module keymap")222 else:223 speech.speakMessage(_("Could not load default module "))224 raise RuntimeError("appModuleHandler.initialize: could not load default module ")225 175 226 176 #base class for appModules … … 241 191 242 192 def __repr__(self): 243 return "AppModule (appName %s, process ID %s) at address %x"%(self.appName,self.processID,id(self)) 193 return "<%s (appName %s, process ID %s) at address %x>"%(self.appModuleName,self.appName,self.processID,id(self)) 194 195 def _get_appModuleName(self): 196 return "%s.%s"%(self.__class__.__module__.split('.')[-1],self.__class__.__name__) 244 197 245 198 def _get_isAlive(self): … … 248 201 def __del__(self): 249 202 winKernel.closeHandle(self.processHandle) 203 204 def loadKeyMap(self): 205 """Loads a key map in to this appModule . if the key map exists. It takes in to account what layout NVDA is currently set to. 206 """ 207 if '_keyMap' in self.__dict__: 208 self._keyMap={} 209 layout=config.conf["keyboard"]["keyboardLayout"] 210 for modClass in reversed(list(itertools.takewhile(lambda x: issubclass(x,AppModule) and x is not AppModule,self.__class__.__mro__))): 211 name=modClass.__module__.split('.')[-1] 212 keyMapFileName=getKeyMapFileName(name,layout) 213 if not keyMapFileName: 214 continue 215 keyMapFile=open(keyMapFileName,'r') 216 bindCount=0 217 #If the appModule already has a running keyMap, clear it 218 for line in (x for x in keyMapFile if not x.startswith('#') and not x.isspace()): 219 m=re_keyScript.match(line) 220 if m: 221 try: 222 self.bindKey_runtime(m.group('key'),m.group('script')) 223 bindCount+=1 224 except: 225 log.error("error binding %s to %s in appModule %s"%(m.group('script'),m.group('key'),self)) 226 log.debug("added %s bindings to appModule %s from file %s"%(bindCount,self,keyMapFileName)) -
trunk/source/appModules/_default.py
r2494 r2498 761 761 mod=focus.appModule 762 762 if isinstance(mod,appModuleHandler.AppModule) and type(mod)!=appModuleHandler.AppModule: 763 speech.speakMessage(_("and currently loaded module is %s") % mod.app Name)763 speech.speakMessage(_("and currently loaded module is %s") % mod.appModuleName) 764 764 script_speakApplicationName.__doc__ = _("Speaks filename of the active application along with name of the currently loaded appmodule") 765 765 -
trunk/source/appModules/audacity.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 import winUser 9 9 import controlTypes 10 10 from NVDAObjects.IAccessible import edit 11 11 12 class AppModule( appModuleHandler.AppModule):12 class AppModule(_default.AppModule): 13 13 14 14 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/calc.py
r2413 r2498 1 import appModuleHandler1 import _default 2 2 import speech 3 3 4 class AppModule( appModuleHandler.AppModule):4 class AppModule(_default.AppModule): 5 5 6 6 def __init__(self,*args,**kwargs): -
trunk/source/appModules/dosvox.py
r2410 r2498 1 import appModuleHandler1 import _default 2 2 import speech 3 3 4 class AppModule( appModuleHandler.AppModule):4 class AppModule(_default.AppModule): 5 5 6 6 def event_appGainFocus(self): -
trunk/source/appModules/firefox.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 import controlTypes 9 9 import api … … 11 11 import winUser 12 12 13 class AppModule( appModuleHandler.AppModule):13 class AppModule(_default.AppModule): 14 14 15 15 def event_stateChange(self, obj, nextHandler): -
trunk/source/appModules/miranda32.py
r2490 r2498 10 10 import winUser 11 11 from NVDAObjects.IAccessible import IAccessible, PropertyPage 12 import appModuleHandler12 import _default 13 13 import speech 14 14 import controlTypes … … 72 72 ANSILOGS=(1001,1006) 73 73 74 class AppModule( appModuleHandler.AppModule):74 class AppModule(_default.AppModule): 75 75 76 76 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/mplayerc.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 import controlTypes 9 9 10 class AppModule( appModuleHandler.AppModule):10 class AppModule(_default.AppModule): 11 11 12 12 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/msimn.py
r2410 r2498 11 11 import eventHandler 12 12 import IAccessibleHandler 13 import appModuleHandler13 import _default 14 14 import speech 15 15 from keyUtils import key, sendKey … … 33 33 } 34 34 35 class AppModule( appModuleHandler.AppModule):35 class AppModule(_default.AppModule): 36 36 37 37 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/msnmsgr.py
r2410 r2498 11 11 import controlTypes 12 12 import textHandler 13 import appModuleHandler13 import _default 14 14 import speech 15 15 import cursorManager … … 32 32 ]) 33 33 34 class AppModule( appModuleHandler.AppModule):34 class AppModule(_default.AppModule): 35 35 36 36 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/nvda.py
r2410 r2498 1 import appModuleHandler1 import _default 2 2 import controlTypes 3 3 import gui 4 4 5 class AppModule( appModuleHandler.AppModule):5 class AppModule(_default.AppModule): 6 6 7 7 def event_NVDAObject_init(self, obj): -
trunk/source/appModules/outlook.py
r2410 r2498 7 7 import time 8 8 import win32com.client 9 import appModuleHandler9 import _default 10 10 import api 11 11 import eventHandler … … 45 45 return ", ".join(nameList) 46 46 47 class AppModule( appModuleHandler.AppModule):47 class AppModule(_default.AppModule): 48 48 49 49 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/skype.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 import controlTypes 9 9 import winUser 10 10 11 class AppModule( appModuleHandler.AppModule):11 class AppModule(_default.AppModule): 12 12 13 13 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/soffice.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 import controlTypes 9 9 import speech … … 12 12 inDocument=False 13 13 14 class AppModule( appModuleHandler.AppModule):14 class AppModule(_default.AppModule): 15 15 16 16 def event_gainFocus(self,obj,nextHandler): -
trunk/source/appModules/thunderbird.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 import controlTypes 9 9 import api … … 11 11 import winUser 12 12 13 class AppModule( appModuleHandler.AppModule):13 class AppModule(_default.AppModule): 14 14 15 15 def event_gainFocus(self, obj, nextHandler): -
trunk/source/appModules/totalcmd.py
r2410 r2498 5 5 #See the file COPYING for more details. 6 6 7 import appModuleHandler7 import _default 8 8 from NVDAObjects.IAccessible import IAccessible 9 9 import speech … … 12 12 oldActivePannel=0 13 13 14 class AppModule( appModuleHandler.AppModule):14 class AppModule(_default.AppModule): 15 15 16 16 def event_NVDAObject_init(self,obj): -
trunk/source/appModules/winamp.py
r2410 r2498 12 12 from scriptHandler import isScriptWaiting 13 13 from NVDAObjects.IAccessible import IAccessible 14 import appModuleHandler14 import _default 15 15 import speech 16 16 import locale … … 52 52 return winUser.sendMessage(hwndWinamp,WM_WA_IPC,0,IPC_GET_REPEAT) 53 53 54 class AppModule( appModuleHandler.AppModule):54 class AppModule(_default.AppModule): 55 55 56 56 def event_NVDAObject_init(self,obj): -
trunk/source/baseObject.py
r1926 r2498 63 63 """ 64 64 scriptName="script_%s"%scriptName 65 func=getattr(self ,scriptName,None)65 func=getattr(self.__class__,scriptName,None) 66 66 if func: 67 67 self.bindKeyToFunc_runtime(keyName,func) -
trunk/source/eventHandler.py
r2468 r2498 122 122 appModule=obj.appModule 123 123 if hasattr(appModule,"event_%s"%name): 124 getattr(appModule,"event_%s"%name)(obj,lambda: executeEvent_defaultAppModuleLevel(name,obj,**kwargs),**kwargs) 125 else: 126 executeEvent_defaultAppModuleLevel(name,obj,**kwargs) 127 128 def executeEvent_defaultAppModuleLevel(name,obj,**kwargs): 129 default=appModuleHandler.default 130 if hasattr(default,"event_%s"%name): 131 getattr(default,"event_%s"%name)(obj,lambda: executeEvent_virtualBufferLevel(name,obj,**kwargs),**kwargs) 124 getattr(appModule,"event_%s"%name)(obj,lambda: executeEvent_virtualBufferLevel(name,obj,**kwargs),**kwargs) 132 125 else: 133 126 executeEvent_virtualBufferLevel(name,obj,**kwargs) -
trunk/source/gui/settingsDialogs.py
r2482 r2498 411 411 config.conf['keyboard']['keyboardLayout']=layout 412 412 for m in appModuleHandler.runningTable.values(): 413 if m.__class__==appModuleHandler.AppModule: 414 continue 415 appModuleHandler.loadKeyMap(m.appName,m) 416 appModuleHandler.loadKeyMap(appModuleHandler.default.appName,appModuleHandler.default) 413 m.loadKeyMap() 417 414 config.conf["keyboard"]["useCapsLockAsNVDAModifierKey"]=self.capsAsNVDAModifierCheckBox.IsChecked() 418 415 config.conf["keyboard"]["useNumpadInsertAsNVDAModifierKey"]=self.numpadInsertAsNVDAModifierCheckBox.IsChecked() -
trunk/source/scriptHandler.py
r2468 r2498 29 29 appModule=focusObject.appModule 30 30 func=appModule.getScript(keyPress) if appModule else None 31 if func:32 return func33 return findScript_defaultAppModuleLevel(keyPress)34 35 def findScript_defaultAppModuleLevel(keyPress):36 default=appModuleHandler.default37 func=default.getScript(keyPress)38 31 if func: 39 32 return func

NVDA is supported by