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
- TransportOutputChannel.cs
- CatalogPartCollection.cs
- CreateDataSourceDialog.cs
- Executor.cs
- FillRuleValidation.cs
- SimpleTypeResolver.cs
- RowCache.cs
- PopOutPanel.cs
- HtmlLinkAdapter.cs
- DisplayInformation.cs
- RtfToken.cs
- SHA1.cs
- TreeView.cs
- FormCollection.cs
- ImageDrawing.cs
- XmlSchemaSimpleTypeUnion.cs
- ButtonBase.cs
- SqlTypeSystemProvider.cs
- XmlProcessingInstruction.cs
- DataGridViewCellPaintingEventArgs.cs
- EditingScope.cs
- SchemaImporterExtensionsSection.cs
- TypeConverterHelper.cs
- ForwardPositionQuery.cs
- MetadataExchangeBindings.cs
- PersistChildrenAttribute.cs
- EventWaitHandleSecurity.cs
- RadioButtonFlatAdapter.cs
- SQLInt64Storage.cs
- MatrixTransform.cs
- TagPrefixCollection.cs
- ObjectNavigationPropertyMapping.cs
- ListDictionaryInternal.cs
- ContextMenu.cs
- Attributes.cs
- PersistChildrenAttribute.cs
- ApplicationServiceManager.cs
- HtmlMeta.cs
- RectAnimationClockResource.cs
- EmptyStringExpandableObjectConverter.cs
- DesignerDataStoredProcedure.cs
- AsyncDataRequest.cs
- SerializationInfo.cs
- Pool.cs
- SimpleHandlerFactory.cs
- ModuleBuilderData.cs
- CroppedBitmap.cs
- Propagator.Evaluator.cs
- XPathDocumentIterator.cs
- BindingsCollection.cs
- AnimationStorage.cs
- Thread.cs
- Grid.cs
- Int64Converter.cs
- ResourceProviderFactory.cs
- ExclusiveHandleList.cs
- ReflectPropertyDescriptor.cs
- TextPenaltyModule.cs
- WinOEToolBoxItem.cs
- FocusTracker.cs
- StorageEntitySetMapping.cs
- TCPListener.cs
- LocalizableResourceBuilder.cs
- AssemblyResourceLoader.cs
- ImageClickEventArgs.cs
- ContextItemManager.cs
- SecondaryIndex.cs
- ColumnClickEvent.cs
- SafeNativeMethods.cs
- Compiler.cs
- DependencyPropertyKey.cs
- XpsPackagingException.cs
- RotateTransform.cs
- CompilerGeneratedAttribute.cs
- BaseTemplateParser.cs
- ITextView.cs
- EventHandlersDesigner.cs
- Composition.cs
- SiblingIterators.cs
- DataBindingCollectionConverter.cs
- SelectionUIHandler.cs
- CurrencyManager.cs
- ObjectIDGenerator.cs
- ListSourceHelper.cs
- ValidationResult.cs
- DiscoveryClientDocuments.cs
- XmlParserContext.cs
- CommentAction.cs
- DebuggerAttributes.cs
- DocumentsTrace.cs
- BindingBase.cs
- TreeViewItem.cs
- ZoneIdentityPermission.cs
- WebBrowserContainer.cs
- SettingsAttributeDictionary.cs
- FormsAuthenticationUser.cs
- SafeBitVector32.cs
- XmlTypeAttribute.cs
- OleDbRowUpdatingEvent.cs
- DocumentationServerProtocol.cs