Index: components/ideintf/objectinspector.pp =================================================================== --- components/ideintf/objectinspector.pp (revision 56931) +++ components/ideintf/objectinspector.pp (working copy) @@ -2204,7 +2204,10 @@ if (not (paSubProperties in Row.Editor.GetAttributes)) then exit; // check if circling if (Row.Editor is TPersistentPropertyEditor) then begin - AnObject:=TPersistent(Row.Editor.GetObjectValue); + if (Row.Editor is TInterfacePropertyEditor) then + AnObject:=TPersistent(Row.Editor.GetIntfValue) + else + AnObject:=TPersistent(Row.Editor.GetObjectValue); if FSelection.IndexOf(AnObject)>=0 then exit; ParentRow:=Row.Parent; while ParentRow<>nil do begin Index: components/ideintf/propedits.pp =================================================================== --- components/ideintf/propedits.pp (revision 56931) +++ components/ideintf/propedits.pp (working copy) @@ -747,6 +747,8 @@ function GetSelections: TPersistentSelectionList; override; public function AllEqual: Boolean; override; + procedure Edit; override; + function GetAttributes: TPropertyAttributes; override; procedure GetValues(Proc: TGetStrProc); override; procedure SetValue(const NewValue: string); override; function GetValue: AnsiString; override; @@ -5088,6 +5090,36 @@ Result := True; end; +procedure TInterfacePropertyEditor.Edit; +var + Temp: TPersistent; + Designer: TIDesigner; + AComponent: TComponent; +begin + Temp := GetComponentReference; + if Temp is TComponent then begin + AComponent:=TComponent(Temp); + Designer:=FindRootDesigner(AComponent); + if (Designer<>nil) + and (Designer.GetShiftState * [ssCtrl, ssLeft] = [ssCtrl, ssLeft]) then + Designer.SelectOnlyThisComponent(AComponent) + else + inherited Edit; + end else + inherited Edit; +end; + +function TInterfacePropertyEditor.GetAttributes: TPropertyAttributes; +begin + Result := [paMultiSelect]; + if Assigned(GetPropInfo^.SetProc) then + Result := Result + [paValueList, paSortList, paRevertable, paVolatileSubProperties] + else + Result := Result + [paReadOnly]; + if GReferenceExpandable and (GetComponentReference <> nil) and AllEqual then + Result := Result + [paSubProperties]; +end; + function TInterfacePropertyEditor.GetComponent(const AInterface: IInterface): TComponent; var ComponentRef: IInterfaceComponentReference;