Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / DefaultTextStoreTextComposition.cs / 1305600 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GraphicsContainer.cs
- ConfigurationPermission.cs
- XmlHierarchyData.cs
- AnonymousIdentificationModule.cs
- PathSegment.cs
- GlyphManager.cs
- VirtualizingPanel.cs
- MatrixAnimationBase.cs
- PageAsyncTask.cs
- QilExpression.cs
- Guid.cs
- DbLambda.cs
- PageAdapter.cs
- PlatformCulture.cs
- CodeTypeParameterCollection.cs
- DataGridItemCollection.cs
- Point3DAnimationBase.cs
- UnitySerializationHolder.cs
- XmlHierarchicalDataSourceView.cs
- DiscoveryDocument.cs
- XmlAttributeCollection.cs
- ConfigXmlComment.cs
- StateFinalizationDesigner.cs
- PopupEventArgs.cs
- DtcInterfaces.cs
- FixUp.cs
- RelatedEnd.cs
- EntityProviderFactory.cs
- WhiteSpaceTrimStringConverter.cs
- TypeInfo.cs
- TextTrailingWordEllipsis.cs
- CheckableControlBaseAdapter.cs
- ToolStrip.cs
- DataGridParentRows.cs
- TrackingRecord.cs
- TransactionCache.cs
- ConnectionInterfaceCollection.cs
- ParameterBinding.cs
- WebReference.cs
- X509Utils.cs
- MemberPathMap.cs
- ListBox.cs
- EventListenerClientSide.cs
- WSDualHttpBindingElement.cs
- AttributeSetAction.cs
- GridViewCommandEventArgs.cs
- ServicePointManager.cs
- Paragraph.cs
- XmlILModule.cs
- SharedHttpTransportManager.cs
- ViewValidator.cs
- PrintPreviewDialog.cs
- TemplatedMailWebEventProvider.cs
- XamlTreeBuilder.cs
- DataControlReference.cs
- xml.cs
- ByteStreamGeometryContext.cs
- safemediahandle.cs
- SqlFacetAttribute.cs
- MatrixAnimationUsingKeyFrames.cs
- InputDevice.cs
- CacheDependency.cs
- DiscoveryMessageSequence.cs
- ListDictionaryInternal.cs
- Menu.cs
- InvokeMemberBinder.cs
- DesignerActionMethodItem.cs
- FontClient.cs
- AuthenticationService.cs
- HwndHostAutomationPeer.cs
- SettingsProviderCollection.cs
- BaseCollection.cs
- RelationshipDetailsRow.cs
- SecurityContextSecurityToken.cs
- MethodRental.cs
- TextFormatterHost.cs
- Walker.cs
- AsymmetricSecurityProtocolFactory.cs
- PerspectiveCamera.cs
- SpStreamWrapper.cs
- RunWorkerCompletedEventArgs.cs
- LiteralSubsegment.cs
- XmlWhitespace.cs
- SHA1CryptoServiceProvider.cs
- TaskFileService.cs
- AsyncResult.cs
- Guid.cs
- CmsInterop.cs
- TextLineBreak.cs
- ComponentDispatcher.cs
- ReachSerializableProperties.cs
- WindowsFont.cs
- WebBrowsableAttribute.cs
- PageThemeCodeDomTreeGenerator.cs
- DelegatingConfigHost.cs
- TcpConnectionPoolSettingsElement.cs
- NegatedConstant.cs
- _ProxyChain.cs
- DeviceContext2.cs
- BasicCellRelation.cs