Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ExecutionEngineException.cs
- InkPresenter.cs
- RegexCompilationInfo.cs
- DynamicPropertyReader.cs
- UriGenerator.cs
- KeyedHashAlgorithm.cs
- NullRuntimeConfig.cs
- PermissionListSet.cs
- _ShellExpression.cs
- HitTestParameters3D.cs
- KoreanCalendar.cs
- TreeNodeBindingDepthConverter.cs
- SoapInteropTypes.cs
- TypeHelpers.cs
- EventPrivateKey.cs
- FtpWebRequest.cs
- StreamInfo.cs
- PropertyRef.cs
- HandoffBehavior.cs
- MenuItemCollectionEditor.cs
- DialogResultConverter.cs
- _LocalDataStoreMgr.cs
- ParseHttpDate.cs
- AspProxy.cs
- AudioException.cs
- RtType.cs
- DependencyObject.cs
- RepeatInfo.cs
- ObjectDesignerDataSourceView.cs
- ExtensionQuery.cs
- DelayedRegex.cs
- KnownColorTable.cs
- ItemsPresenter.cs
- SortDescriptionCollection.cs
- UseManagedPresentationBindingElementImporter.cs
- StrongNameKeyPair.cs
- SettingsSavedEventArgs.cs
- SqlCacheDependencySection.cs
- _FtpControlStream.cs
- DataGridViewColumnHeaderCell.cs
- TextOptions.cs
- Int32Converter.cs
- HtmlWindow.cs
- FontFamilyIdentifier.cs
- RealizationDrawingContextWalker.cs
- EditableTreeList.cs
- BooleanExpr.cs
- WebAdminConfigurationHelper.cs
- BitmapEffectInputConnector.cs
- ScrollPattern.cs
- ConfigurationLocationCollection.cs
- HybridObjectCache.cs
- updatecommandorderer.cs
- XmlWrappingWriter.cs
- XmlNodeReader.cs
- HwndAppCommandInputProvider.cs
- UpnEndpointIdentity.cs
- PersonalizationStateInfoCollection.cs
- HtmlTableCellCollection.cs
- LambdaCompiler.Statements.cs
- clipboard.cs
- CodeEntryPointMethod.cs
- ScrollProviderWrapper.cs
- CharKeyFrameCollection.cs
- NamespaceDecl.cs
- IisTraceListener.cs
- SharedPerformanceCounter.cs
- InvalidateEvent.cs
- FrameworkContentElement.cs
- RoleGroupCollectionEditor.cs
- GetPageNumberCompletedEventArgs.cs
- MenuTracker.cs
- ResourcePool.cs
- DbInsertCommandTree.cs
- InstanceNormalEvent.cs
- RelatedView.cs
- DragDrop.cs
- PropertyMappingExceptionEventArgs.cs
- TreeWalker.cs
- MarshalDirectiveException.cs
- CounterSet.cs
- GeometryCollection.cs
- EncoderExceptionFallback.cs
- BuildResult.cs
- ContainerParagraph.cs
- CodeTypeParameterCollection.cs
- MoveSizeWinEventHandler.cs
- FrugalMap.cs
- ProfileEventArgs.cs
- Random.cs
- Drawing.cs
- NetPeerTcpBindingElement.cs
- DataSpaceManager.cs
- ValueProviderWrapper.cs
- ImageMap.cs
- ToolStripPanel.cs
- __Filters.cs
- SecurityDocument.cs
- SplitterDesigner.cs
- SelectionChangedEventArgs.cs