Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / System / Windows / Input / DefaultTextStoreTextComposition.cs / 1 / DefaultTextStoreTextComposition.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: DefaultTextStoreTextComposition class is the composition // object for the input in DefaultTextStore. // Cicero's composition injected to DefaulteTextStore is // represent by this DefaultTextStoreTextComposition. // This has custom Complete method to control // Cicero's composiiton. // // History: // 04/01/2004 : yutakas created // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.Text; using System.Windows.Threading; using System.Windows; using System.Security; using MS.Win32; namespace System.Windows.Input { ////// DefaultTextStoreTextComposition class implements Complete for /// the composition in DefaultTextStore. /// internal class DefaultTextStoreTextComposition : TextComposition { //----------------------------------------------------- // // ctor // //----------------------------------------------------- ////// ctor /// ////// Critical - calls base ctor - which in turn stores the inputmanager that's critical. /// [SecurityCritical] internal DefaultTextStoreTextComposition(InputManager inputManager, IInputElement source, string text, TextCompositionAutoComplete autoComplete) : base(inputManager, source, text, autoComplete) { } //------------------------------------------------------ // // Public Interface Methods // //----------------------------------------------------- ////// Finalize the composition. /// This does not call base.Complete() because TextComposition.Complete() /// will call TextServicesManager.CompleteComposition() directly to generate TextCompositionEvent. /// We finalize Cicero's composition and DefaultTextStore will automatically /// generate the proper TextComposition events. /// ////// Critical: This completes the composition and in doing so calls GetTransitionaryContext which gives it ITfContext /// TreatAsSafe: The context is not exposed, neither are the other members /// [SecurityCritical,SecurityTreatAsSafe] public override void Complete() { // VerifyAccess(); UnsafeNativeMethods.ITfContext context = GetTransitoryContext(); UnsafeNativeMethods.ITfContextOwnerCompositionServices compositionService = context as UnsafeNativeMethods.ITfContextOwnerCompositionServices; UnsafeNativeMethods.ITfCompositionView composition = GetComposition(context); if (composition != null) { // Terminate composition if there is a composition view. compositionService.TerminateComposition(composition); Marshal.ReleaseComObject(composition); } Marshal.ReleaseComObject(context); } //------------------------------------------------------ // // private Methods // //------------------------------------------------------ ////// Get the base ITfContext of the transitory document. /// ////// Critical: This exposes ITfContext which has unsecure methods /// [SecurityCritical] private UnsafeNativeMethods.ITfContext GetTransitoryContext() { DefaultTextStore defaultTextStore = DefaultTextStore.Current; UnsafeNativeMethods.ITfDocumentMgr doc = defaultTextStore.TransitoryDocumentManager; UnsafeNativeMethods.ITfContext context; doc.GetBase(out context); Marshal.ReleaseComObject(doc); return context; } ////// Get ITfContextView of the context. /// ////// Critical: calls Marshal.ReleaseComObject which has a LinkDemand /// TreatAsSafe: can't pass in arbitrary COM object to release /// [SecurityCritical, SecurityTreatAsSafe] private UnsafeNativeMethods.ITfCompositionView GetComposition(UnsafeNativeMethods.ITfContext context) { UnsafeNativeMethods.ITfContextComposition contextComposition; UnsafeNativeMethods.IEnumITfCompositionView enumCompositionView; UnsafeNativeMethods.ITfCompositionView[] compositionViews = new UnsafeNativeMethods.ITfCompositionView[1]; int fetched; contextComposition = (UnsafeNativeMethods.ITfContextComposition)context; contextComposition.EnumCompositions(out enumCompositionView); enumCompositionView.Next(1, compositionViews, out fetched); Marshal.ReleaseComObject(enumCompositionView); return compositionViews[0]; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: DefaultTextStoreTextComposition class is the composition // object for the input in DefaultTextStore. // Cicero's composition injected to DefaulteTextStore is // represent by this DefaultTextStoreTextComposition. // This has custom Complete method to control // Cicero's composiiton. // // History: // 04/01/2004 : yutakas created // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.Text; using System.Windows.Threading; using System.Windows; using System.Security; using MS.Win32; namespace System.Windows.Input { ////// DefaultTextStoreTextComposition class implements Complete for /// the composition in DefaultTextStore. /// internal class DefaultTextStoreTextComposition : TextComposition { //----------------------------------------------------- // // ctor // //----------------------------------------------------- ////// ctor /// ////// Critical - calls base ctor - which in turn stores the inputmanager that's critical. /// [SecurityCritical] internal DefaultTextStoreTextComposition(InputManager inputManager, IInputElement source, string text, TextCompositionAutoComplete autoComplete) : base(inputManager, source, text, autoComplete) { } //------------------------------------------------------ // // Public Interface Methods // //----------------------------------------------------- ////// Finalize the composition. /// This does not call base.Complete() because TextComposition.Complete() /// will call TextServicesManager.CompleteComposition() directly to generate TextCompositionEvent. /// We finalize Cicero's composition and DefaultTextStore will automatically /// generate the proper TextComposition events. /// ////// Critical: This completes the composition and in doing so calls GetTransitionaryContext which gives it ITfContext /// TreatAsSafe: The context is not exposed, neither are the other members /// [SecurityCritical,SecurityTreatAsSafe] public override void Complete() { // VerifyAccess(); UnsafeNativeMethods.ITfContext context = GetTransitoryContext(); UnsafeNativeMethods.ITfContextOwnerCompositionServices compositionService = context as UnsafeNativeMethods.ITfContextOwnerCompositionServices; UnsafeNativeMethods.ITfCompositionView composition = GetComposition(context); if (composition != null) { // Terminate composition if there is a composition view. compositionService.TerminateComposition(composition); Marshal.ReleaseComObject(composition); } Marshal.ReleaseComObject(context); } //------------------------------------------------------ // // private Methods // //------------------------------------------------------ ////// Get the base ITfContext of the transitory document. /// ////// Critical: This exposes ITfContext which has unsecure methods /// [SecurityCritical] private UnsafeNativeMethods.ITfContext GetTransitoryContext() { DefaultTextStore defaultTextStore = DefaultTextStore.Current; UnsafeNativeMethods.ITfDocumentMgr doc = defaultTextStore.TransitoryDocumentManager; UnsafeNativeMethods.ITfContext context; doc.GetBase(out context); Marshal.ReleaseComObject(doc); return context; } ////// Get ITfContextView of the context. /// ////// Critical: calls Marshal.ReleaseComObject which has a LinkDemand /// TreatAsSafe: can't pass in arbitrary COM object to release /// [SecurityCritical, SecurityTreatAsSafe] private UnsafeNativeMethods.ITfCompositionView GetComposition(UnsafeNativeMethods.ITfContext context) { UnsafeNativeMethods.ITfContextComposition contextComposition; UnsafeNativeMethods.IEnumITfCompositionView enumCompositionView; UnsafeNativeMethods.ITfCompositionView[] compositionViews = new UnsafeNativeMethods.ITfCompositionView[1]; int fetched; contextComposition = (UnsafeNativeMethods.ITfContextComposition)context; contextComposition.EnumCompositions(out enumCompositionView); enumCompositionView.Next(1, compositionViews, out fetched); Marshal.ReleaseComObject(enumCompositionView); return compositionViews[0]; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XPathNodeHelper.cs
- XmlIterators.cs
- OpCopier.cs
- JsonReaderWriterFactory.cs
- AudioBase.cs
- Switch.cs
- Rules.cs
- SynchronizedReadOnlyCollection.cs
- GACMembershipCondition.cs
- TdsParserHelperClasses.cs
- CodeAttributeDeclaration.cs
- PerformanceCounterLib.cs
- VectorKeyFrameCollection.cs
- SynchronousReceiveElement.cs
- ParserContext.cs
- ModelTreeEnumerator.cs
- Privilege.cs
- ConfigXmlCDataSection.cs
- OdbcReferenceCollection.cs
- CodePropertyReferenceExpression.cs
- ToolBarDesigner.cs
- CombinedGeometry.cs
- ReflectionServiceProvider.cs
- NGCPageContentCollectionSerializerAsync.cs
- Region.cs
- SqlMetaData.cs
- WebPartRestoreVerb.cs
- VisualTreeHelper.cs
- KeyedCollection.cs
- SqlRewriteScalarSubqueries.cs
- diagnosticsswitches.cs
- AdPostCacheSubstitution.cs
- MetadataItem.cs
- EndpointAddress10.cs
- SelectorItemAutomationPeer.cs
- XmlValueConverter.cs
- ParallelTimeline.cs
- CopyAction.cs
- HttpCacheVaryByContentEncodings.cs
- TraceHwndHost.cs
- IndexerNameAttribute.cs
- QilTernary.cs
- OuterGlowBitmapEffect.cs
- SimpleRecyclingCache.cs
- ScriptDescriptor.cs
- WeakReferenceList.cs
- OrderByBuilder.cs
- FieldDescriptor.cs
- Frame.cs
- FlatButtonAppearance.cs
- CharConverter.cs
- FeatureAttribute.cs
- WindowsImpersonationContext.cs
- BitmapMetadataBlob.cs
- AnimationTimeline.cs
- CheckPair.cs
- MetadataArtifactLoaderCompositeResource.cs
- DeploymentSectionCache.cs
- AutomationIdentifier.cs
- MediaCommands.cs
- FontStyle.cs
- RedirectionProxy.cs
- _UriSyntax.cs
- StylusPointPropertyId.cs
- SubtreeProcessor.cs
- QilFactory.cs
- EventDescriptor.cs
- metadatamappinghashervisitor.cs
- ImplicitInputBrush.cs
- Array.cs
- OdbcErrorCollection.cs
- DynamicRenderer.cs
- OutputCacheProfileCollection.cs
- SecurityTokenProvider.cs
- InvalidDataContractException.cs
- DebuggerAttributes.cs
- BitmapSourceSafeMILHandle.cs
- ResourceContainer.cs
- UInt64.cs
- UnitySerializationHolder.cs
- Encoder.cs
- ContainerVisual.cs
- FilterableAttribute.cs
- ByteStorage.cs
- ParameterReplacerVisitor.cs
- TripleDESCryptoServiceProvider.cs
- EqualityComparer.cs
- SizeValueSerializer.cs
- XamlTemplateSerializer.cs
- DateTimeOffsetAdapter.cs
- BaseTreeIterator.cs
- SqlTransaction.cs
- InArgument.cs
- streamingZipPartStream.cs
- CngProperty.cs
- GridViewEditEventArgs.cs
- HMAC.cs
- CodeRegionDirective.cs
- AnnotationStore.cs
- CompilationSection.cs