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
- CodeEntryPointMethod.cs
- AccessDataSource.cs
- Common.cs
- WebPartMovingEventArgs.cs
- DiagnosticsConfiguration.cs
- ThrowHelper.cs
- ButtonChrome.cs
- SplitterPanelDesigner.cs
- ReflectionTypeLoadException.cs
- JournalEntryListConverter.cs
- MergeFilterQuery.cs
- PipelineDeploymentState.cs
- ImportOptions.cs
- TypeReference.cs
- NotImplementedException.cs
- BitmapEffectGroup.cs
- IntSecurity.cs
- BinaryParser.cs
- PseudoWebRequest.cs
- EntityDataSourceDataSelectionPanel.cs
- XmlValidatingReaderImpl.cs
- WebPartCloseVerb.cs
- WebBrowserNavigatingEventHandler.cs
- DBPropSet.cs
- TemplateBamlRecordReader.cs
- BuildProviderUtils.cs
- TextTreeTextElementNode.cs
- RootBuilder.cs
- X509Utils.cs
- LockCookie.cs
- XsltFunctions.cs
- BindingExpressionBase.cs
- Base64Decoder.cs
- SelectionProcessor.cs
- DebuggerAttributes.cs
- HierarchicalDataBoundControl.cs
- GuidConverter.cs
- EmptyQuery.cs
- DocumentPageHost.cs
- MembershipValidatePasswordEventArgs.cs
- PropertyCondition.cs
- ValidationRule.cs
- AnnotationResource.cs
- DataGrid.cs
- NamedPipeConnectionPoolSettings.cs
- SettingsPropertyWrongTypeException.cs
- CodeIdentifiers.cs
- Processor.cs
- SafeMILHandle.cs
- SwitchLevelAttribute.cs
- HttpHandlersSection.cs
- Soap.cs
- MultiPropertyDescriptorGridEntry.cs
- IncrementalHitTester.cs
- Module.cs
- LazyInitializer.cs
- TextStore.cs
- HatchBrush.cs
- ResourceManager.cs
- FileSystemWatcher.cs
- BrushValueSerializer.cs
- BrowserDefinition.cs
- Wizard.cs
- RoutedEventHandlerInfo.cs
- XmlILIndex.cs
- XPathEmptyIterator.cs
- PieceDirectory.cs
- ZipIOModeEnforcingStream.cs
- InvalidPropValue.cs
- StyleCollectionEditor.cs
- ContextStack.cs
- DefaultProxySection.cs
- GacUtil.cs
- LoginView.cs
- OdbcConnectionStringbuilder.cs
- ResourceIDHelper.cs
- RenderDataDrawingContext.cs
- DataSourceCacheDurationConverter.cs
- GB18030Encoding.cs
- Run.cs
- Point3DAnimationBase.cs
- Vector3DAnimationBase.cs
- MenuRenderer.cs
- EnumerableWrapperWeakToStrong.cs
- PrinterResolution.cs
- PropertyGridCommands.cs
- ConnectionPoint.cs
- ErrorRuntimeConfig.cs
- DataGridViewCellCancelEventArgs.cs
- SchemaObjectWriter.cs
- MatrixAnimationUsingPath.cs
- FactoryRecord.cs
- CheckBoxBaseAdapter.cs
- DeflateStreamAsyncResult.cs
- LoginCancelEventArgs.cs
- FixedSOMPageElement.cs
- RuleProcessor.cs
- wgx_commands.cs
- listitem.cs
- CellConstant.cs