from NVDAObjects.behaviors import EditableTextWithoutAutoSelectDetection\r
from cursorManager import ReviewCursorManager\r
import controlTypes\r
+from logHandler import log\r
\r
#Bullet types\r
ppBulletNumbered=2\r
elif t:\r
return unichr(ppBulletFormat.character)\r
\r
+def getPpObjectModel(windowHandle,forceForeground=False):\r
+ """\r
+ Fetches the Powerpoint object model from a given PaneClassDC window.\r
+ If forceForeground is True, then NVDA will quickly grab foreground and give it back to Powerpoint, which forces Powerpoint to register its object model on start-up much quicker.\r
+ """\r
+ if forceForeground:\r
+ import wx\r
+ import gui\r
+ d=wx.Dialog(None,title=_("Waiting for Powerpoint..."))\r
+ gui.mainFrame.prePopup()\r
+ d.Show()\r
+ d.Destroy()\r
+ gui.mainFrame.postPopup()\r
+ try:\r
+ pDispatch=oleacc.AccessibleObjectFromWindow(windowHandle,winUser.OBJID_NATIVEOM,interface=comtypes.automation.IDispatch)\r
+ except (comtypes.COMError, WindowsError):\r
+ log.debugWarning("Could not get MS Powerpoint object model",exc_info=True)\r
+ return None\r
+ return comtypes.client.dynamic.Dispatch(pDispatch)\r
+\r
class PaneClassDC(Window):\r
"""Handles fetching of the Powerpoint object model."""\r
\r
\r
def _get_ppObjectModel(self):\r
"""Fetches and caches the Powerpoint DocumentWindow object for the current presentation."""\r
- try:\r
- pDispatch=oleacc.AccessibleObjectFromWindow(self.windowHandle,winUser.OBJID_NATIVEOM,interface=comtypes.automation.IDispatch)\r
- except (comtypes.COMError, WindowsError):\r
- log.debugWarning("Could not get MS Word object model",exc_info=True)\r
- return None\r
- self.ppObjectModel=comtypes.client.dynamic.Dispatch(pDispatch)\r
- return self.ppObjectModel\r
+ m=getPpObjectModel(self.windowHandle)\r
+ if not m:\r
+ m=getPpObjectModel(self.windowHandle,forceForeground=True)\r
+ if m:\r
+ self.ppObjectModel=m\r
+ return self.ppObjectModel\r
\r
class DocumentWindow(PaneClassDC):\r
"""Represents the document window for a presentation. Bounces focus to the currently selected slide, shape or text frame."""\r