< prev index next >

src/jdk.accessibility/windows/native/libwindowsaccessbridge/WinAccessBridge.cpp

Print this page




 435 BOOL
 436 WinAccessBridge::queuePackage(char *buffer, long bufsize) {
 437     PrintDebugString("  in WinAccessBridge::queuePackage(%p, %d)", buffer, bufsize);
 438 
 439     AccessBridgeQueueElement *element = new AccessBridgeQueueElement(buffer, bufsize);
 440 
 441     messageQueue->add(element);
 442     PostMessage(dialogWindow, AB_MESSAGE_QUEUED, (WPARAM) 0, (LPARAM) 0);
 443     return TRUE;
 444 }
 445 
 446 
 447 /**
 448  * receiveAQueuedPackage - remove a pending packge from the queue and
 449  *                         handle it. If the queue is busy, post a
 450  *                         message to self to retrieve it later
 451  *
 452  */
 453 BOOL
 454 WinAccessBridge::receiveAQueuedPackage() {
 455     AccessBridgeQueueElement *element;
 456 
 457     PrintDebugString("in WinAccessBridge::receiveAQueuedPackage()");
 458 
 459     // ensure against re-entrancy problems...
 460     if (messageQueue->getRemoveLockSetting() == FALSE) {
 461         messageQueue->setRemoveLock(TRUE);
 462 
 463         PrintDebugString("  dequeueing message");
 464 
 465         QueueReturns result = messageQueue->remove(&element);
 466 
 467         PrintDebugString("   'element->buffer' contains:");
 468         DEBUG_CODE(PackageType *type = (PackageType *) element->buffer);
 469         DEBUG_CODE(FocusGainedPackageTag *pkg = (FocusGainedPackageTag *) (((char *) element->buffer) + sizeof(PackageType)));
 470         DEBUG_CODE(PrintDebugString("     PackageType = %X", *type));
 471 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
 472         DEBUG_CODE(PrintDebugString("     EventPackage: vmID = %X, event = %p, source = %p", pkg->vmID, pkg->Event, pkg->AccessibleContextSource));
 473 #else // JOBJECT64 is jlong (64 bit)
 474         DEBUG_CODE(PrintDebugString("     EventPackage: vmID = %X, event = %016I64X, source = %016I64X", pkg->vmID, pkg->Event, pkg->AccessibleContextSource));
 475 #endif
 476         switch (result) {
 477 
 478         case cQueueBroken:
 479             PrintDebugString("  ERROR!!! Queue seems to be broken!");
 480             messageQueue->setRemoveLock(FALSE);
 481             return FALSE;
 482 
 483         case cMoreMessages:
 484         case cQueueEmpty:
 485             if (element != (AccessBridgeQueueElement *) 0) {
 486                 PrintDebugString("  found one; sending it!");
 487                 processPackage(element->buffer, element->bufsize);
 488                 delete element;
 489             } else {
 490                 PrintDebugString("  ODD... element == 0!");
 491                 return FALSE;
 492             }
 493             break;
 494 
 495         case cQueueInUse:




 435 BOOL
 436 WinAccessBridge::queuePackage(char *buffer, long bufsize) {
 437     PrintDebugString("  in WinAccessBridge::queuePackage(%p, %d)", buffer, bufsize);
 438 
 439     AccessBridgeQueueElement *element = new AccessBridgeQueueElement(buffer, bufsize);
 440 
 441     messageQueue->add(element);
 442     PostMessage(dialogWindow, AB_MESSAGE_QUEUED, (WPARAM) 0, (LPARAM) 0);
 443     return TRUE;
 444 }
 445 
 446 
 447 /**
 448  * receiveAQueuedPackage - remove a pending packge from the queue and
 449  *                         handle it. If the queue is busy, post a
 450  *                         message to self to retrieve it later
 451  *
 452  */
 453 BOOL
 454 WinAccessBridge::receiveAQueuedPackage() {
 455     AccessBridgeQueueElement *element = NULL;
 456 
 457     PrintDebugString("in WinAccessBridge::receiveAQueuedPackage()");
 458 
 459     // ensure against re-entrancy problems...
 460     if (messageQueue->getRemoveLockSetting() == FALSE) {
 461         messageQueue->setRemoveLock(TRUE);
 462 
 463         PrintDebugString("  dequeueing message");
 464 
 465         QueueReturns result = messageQueue->remove(&element);
 466 









 467         switch (result) {
 468 
 469         case cQueueBroken:
 470             PrintDebugString("  ERROR!!! Queue seems to be broken!");
 471             messageQueue->setRemoveLock(FALSE);
 472             return FALSE;
 473 
 474         case cMoreMessages:
 475         case cQueueEmpty:
 476             if (element != (AccessBridgeQueueElement *) 0) {
 477                 PrintDebugString("  found one; sending it!");
 478                 processPackage(element->buffer, element->bufsize);
 479                 delete element;
 480             } else {
 481                 PrintDebugString("  ODD... element == 0!");
 482                 return FALSE;
 483             }
 484             break;
 485 
 486         case cQueueInUse:


< prev index next >