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:
|