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
- ResXBuildProvider.cs
- DataContractSerializerSection.cs
- EntityDesignPluralizationHandler.cs
- StandardCommands.cs
- TextDecorationCollectionConverter.cs
- PropertiesTab.cs
- DataControlField.cs
- DeferredRunTextReference.cs
- OutputCacheSettingsSection.cs
- SocketAddress.cs
- ProgressBar.cs
- _NegoState.cs
- StorageConditionPropertyMapping.cs
- BulletChrome.cs
- Interlocked.cs
- WebBrowserEvent.cs
- DataGridViewElement.cs
- FixedHyperLink.cs
- NamespaceMapping.cs
- TextProperties.cs
- UiaCoreTypesApi.cs
- AdCreatedEventArgs.cs
- AnimationClock.cs
- EncodingDataItem.cs
- MetadataCache.cs
- CursorConverter.cs
- WmlObjectListAdapter.cs
- ExplicitDiscriminatorMap.cs
- StorageRoot.cs
- Exception.cs
- IssuedTokenClientBehaviorsElement.cs
- AddInBase.cs
- SoapSchemaExporter.cs
- Hyperlink.cs
- MimeFormatExtensions.cs
- Random.cs
- EpmCustomContentWriterNodeData.cs
- ContextProperty.cs
- RulePatternOps.cs
- GlyphManager.cs
- DataGridCommandEventArgs.cs
- Registration.cs
- Registry.cs
- AsyncOperationContext.cs
- TypeKeyValue.cs
- DataServiceQuery.cs
- SourceInterpreter.cs
- CacheSection.cs
- CopyAttributesAction.cs
- SpanIndex.cs
- Span.cs
- SchemaNamespaceManager.cs
- ExpressionNormalizer.cs
- OperationDescriptionCollection.cs
- BitmapEffectState.cs
- PageHandlerFactory.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- PropertyChangeTracker.cs
- SchemaInfo.cs
- ContentOnlyMessage.cs
- WebControlParameterProxy.cs
- ProxyElement.cs
- File.cs
- CommandPlan.cs
- Brushes.cs
- ToolStripActionList.cs
- COM2EnumConverter.cs
- DataPagerFieldCollection.cs
- SmiMetaData.cs
- ParagraphVisual.cs
- PackWebResponse.cs
- RadioButtonList.cs
- ScriptModule.cs
- PropertyConverter.cs
- ValueUnavailableException.cs
- ExtendedPropertyCollection.cs
- _TimerThread.cs
- QilReference.cs
- InvalidDataException.cs
- MessageDecoder.cs
- KeyValueSerializer.cs
- FixedTextBuilder.cs
- ReachVisualSerializerAsync.cs
- MasterPage.cs
- NameValueConfigurationCollection.cs
- SamlAuthenticationStatement.cs
- RadioButtonFlatAdapter.cs
- SystemIcmpV4Statistics.cs
- SqlClientFactory.cs
- DropSource.cs
- BuiltInPermissionSets.cs
- FileIOPermission.cs
- SmtpLoginAuthenticationModule.cs
- Merger.cs
- BitmapInitialize.cs
- UniqueID.cs
- DataGridRow.cs
- TextReader.cs
- EntityDataSource.cs
- MembershipPasswordException.cs