LCL-CustomDrawn-Cocoa: Adds VoiceOver speaking of labels and fixes a crash in voiceover combined with TNotebook

git-svn-id: trunk@38112 -
This commit is contained in:
sekelsenmat 2012-08-02 06:17:45 +00:00
parent 53298ddd96
commit cc0deae393
2 changed files with 27 additions and 29 deletions

View File

@ -1040,11 +1040,11 @@ begin
begin begin
lHandle := TCDWinControl(TWinControl(LCLControl).Handle); lHandle := TCDWinControl(TWinControl(LCLControl).Handle);
LCLBaseControl := lHandle; LCLBaseControl := lHandle;
if lHandle <> nil then
LCLInjectedControl := lHandle.CDControl
else
LCLInjectedControl := nil;
end; end;
if LCLBaseControl = nil then Exit;
if LCLInjectedControl = nil then
LCLInjectedControl := lHandle.CDControl;
end; end;
function TCocoaAccessibleObject.accessibilityAttributeNames: NSArray; function TCocoaAccessibleObject.accessibilityAttributeNames: NSArray;
@ -1057,33 +1057,29 @@ begin
{$endif} {$endif}
lResult := NSMutableArray.array_(); lResult := NSMutableArray.array_();
// Basic elements which all roles have
lResult.addObject(NSAccessibilityDescriptionAttribute);
lResult.addObject(NSAccessibilityEnabledAttribute);
lResult.addObject(NSAccessibilityFocusedAttribute);
lResult.addObject(NSAccessibilityParentAttribute);
lResult.addObject(NSAccessibilityPositionAttribute);
lResult.addObject(NSAccessibilityRoleAttribute);
lResult.addObject(NSAccessibilitySizeAttribute);
lResult.addObject(NSAccessibilityTitleAttribute);
lResult.addObject(NSAccessibilityTopLevelUIElementAttribute);
lResult.addObject(NSAccessibilityWindowAttribute);
lCocoaRole := TCocoaCustomControl.LazRoleToCocoaRole(LCLAcc.AccessibleRole); lCocoaRole := TCocoaCustomControl.LazRoleToCocoaRole(LCLAcc.AccessibleRole);
if lCocoaRole.isEqualToString(NSAccessibilityButtonRole) then if lCocoaRole.isEqualToString(NSAccessibilityButtonRole) then
begin begin
lResult.addObject(NSAccessibilityDescriptionAttribute);
lResult.addObject(NSAccessibilityEnabledAttribute);
lResult.addObject(NSAccessibilityFocusedAttribute);
lResult.addObject(NSAccessibilityParentAttribute);
lResult.addObject(NSAccessibilityPositionAttribute);
lResult.addObject(NSAccessibilityRoleAttribute);
lResult.addObject(NSAccessibilityRoleDescriptionAttribute); lResult.addObject(NSAccessibilityRoleDescriptionAttribute);
lResult.addObject(NSAccessibilitySizeAttribute); end
lResult.addObject(NSAccessibilityTitleAttribute); else if lCocoaRole.isEqualToString(NSAccessibilityStaticTextRole) then
lResult.addObject(NSAccessibilityTopLevelUIElementAttribute); begin
lResult.addObject(NSAccessibilityWindowAttribute); lResult.addObject(NSAccessibilityValueAttribute);
end end
else else
begin begin
lResult.addObject(NSAccessibilityDescriptionAttribute);
lResult.addObject(NSAccessibilityEnabledAttribute);
lResult.addObject(NSAccessibilityFocusedAttribute);
lResult.addObject(NSAccessibilityParentAttribute);
lResult.addObject(NSAccessibilityPositionAttribute);
lResult.addObject(NSAccessibilityRoleAttribute);
lResult.addObject(NSAccessibilitySizeAttribute);
lResult.addObject(NSAccessibilityTitleAttribute);
lResult.addObject(NSAccessibilityTopLevelUIElementAttribute);
lResult.addObject(NSAccessibilityWindowAttribute);
end; end;
// This one we use to put LCL object and class names to help debugging =) // This one we use to put LCL object and class names to help debugging =)
@ -1104,6 +1100,7 @@ var
lNSSize: NSSize; lNSSize: NSSize;
lPoint: TPoint; lPoint: TPoint;
lNSPoint: NSPoint; lNSPoint: NSPoint;
lBool: Boolean;
// //
i: Integer; i: Integer;
lChildAcc: TLazAccessibleObject; lChildAcc: TLazAccessibleObject;
@ -1142,7 +1139,7 @@ begin
// //
else if attribute.isEqualToString(NSAccessibilityValueAttribute) then else if attribute.isEqualToString(NSAccessibilityValueAttribute) then
begin begin
//Result := NSStringUtf8(LCLControl.Caption); Result := NSStringUtf8(LCLControl.Caption);
end end
{else if attribute = NSAccessibilityMinValueAttribute: NSString; cvar; external; {else if attribute = NSAccessibilityMinValueAttribute: NSString; cvar; external;
NSAccessibilityMaxValueAttribute: NSString; cvar; external;} NSAccessibilityMaxValueAttribute: NSString; cvar; external;}
@ -1160,10 +1157,10 @@ begin
begin begin
if LCLControl is TWinControl then if LCLControl is TWinControl then
begin begin
if LCLInjectedControl <> nil then lBool := TWinControl(LCLControl).Focused;
Result := NSNumber.numberWithBool(LCLInjectedControl.Focused) if (not lBool) and (LCLInjectedControl <> nil) then
else lBool := LCLInjectedControl.Focused;
Result := NSNumber.numberWithBool(TWinControl(LCLControl).Focused) Result := NSNumber.numberWithBool(lBool);
end end
else Result := NSNumber.numberWithBool(False); else Result := NSNumber.numberWithBool(False);
end end

View File

@ -175,6 +175,7 @@ begin
Result := HWND(TCocoaAccessibleObject.alloc.init); Result := HWND(TCocoaAccessibleObject.alloc.init);
TCocoaAccessibleObject(Result).LCLAcc := AObject; TCocoaAccessibleObject(Result).LCLAcc := AObject;
TCocoaAccessibleObject(Result).LCLControl := AObject.OwnerControl; TCocoaAccessibleObject(Result).LCLControl := AObject.OwnerControl;
TCocoaAccessibleObject(Result).LCLInjectedControl := nil;
end; end;
class procedure TCDWSLazAccessibleObject.DestroyHandle( class procedure TCDWSLazAccessibleObject.DestroyHandle(