OSDN Git Service

flash backend: Handle events for windowless Flash.
authorJames Teh <jamie@jantrid.net>
Thu, 31 Jan 2013 05:08:33 +0000 (15:08 +1000)
committerJames Teh <jamie@jantrid.net>
Thu, 31 Jan 2013 05:08:33 +0000 (15:08 +1000)
nvdaHelper/vbufBackends/adobeFlash/adobeFlash.cpp

index 5c2aa21..9bb7e8a 100644 (file)
@@ -48,22 +48,22 @@ void CALLBACK AdobeFlashVBufBackend_t::renderThread_winEventProcHook(HWINEVENTHO
        }\r
 \r
        int docHandle=(int)hwnd;\r
-       int ID=childID;\r
-       VBufBackend_t* backend=NULL;\r
+       int ID=(childID>0)?childID:objectID;\r
        for(VBufBackendSet_t::iterator i=runningBackends.begin();i!=runningBackends.end();++i) {\r
+               AdobeFlashVBufBackend_t* backend=NULL;\r
                HWND rootWindow=(HWND)((*i)->rootDocHandle);\r
-               if(rootWindow==hwnd) {\r
-                       backend=(*i);\r
+               if(rootWindow!=hwnd)\r
+                       continue;\r
+               backend=static_cast<AdobeFlashVBufBackend_t*>(*i);\r
+               VBufStorage_controlFieldNode_t* node=backend->getControlFieldNodeWithIdentifier(docHandle,ID);\r
+               if(node)\r
+                       backend->invalidateSubtree(node);\r
+               if(!backend->isWindowless) {\r
+                       // If this is not windowless, there can only be one backend with this docHandle,\r
+                       // so stop searching.\r
+                       break;\r
                }\r
        }\r
-       if(!backend) {\r
-               return;\r
-       }\r
-       VBufStorage_controlFieldNode_t* node=backend->getControlFieldNodeWithIdentifier(docHandle,ID);\r
-       if(!node) {\r
-               return;\r
-       }\r
-       backend->invalidateSubtree(node);\r
 }\r
 \r
 VBufStorage_fieldNode_t* AdobeFlashVBufBackend_t::renderControlContent(VBufStorage_buffer_t* buffer, VBufStorage_controlFieldNode_t* parentNode, VBufStorage_fieldNode_t* previousNode, int docHandle, int id, IAccessible* pacc) {\r