Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / 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 : [....] 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
- AppDomain.cs
- WebPartDescriptionCollection.cs
- LocalServiceSecuritySettingsElement.cs
- __Filters.cs
- MemoryRecordBuffer.cs
- AuthenticationModuleElementCollection.cs
- FixedNode.cs
- AssociationType.cs
- DbProviderManifest.cs
- GenericIdentity.cs
- SqlDataSourceEnumerator.cs
- MergeEnumerator.cs
- TripleDESCryptoServiceProvider.cs
- ComponentEditorPage.cs
- RuntimeTrackingProfile.cs
- DoubleAverageAggregationOperator.cs
- pingexception.cs
- XsltLibrary.cs
- PreservationFileWriter.cs
- Transform3DGroup.cs
- MessageLoggingFilterTraceRecord.cs
- DSASignatureFormatter.cs
- CodeTypeReference.cs
- BaseCollection.cs
- figurelengthconverter.cs
- BinHexEncoder.cs
- EntityDescriptor.cs
- DocumentApplication.cs
- IResourceProvider.cs
- OleDbConnectionFactory.cs
- unsafenativemethodstextservices.cs
- ActivitiesCollection.cs
- SourceFilter.cs
- ToolStripItemRenderEventArgs.cs
- IBuiltInEvidence.cs
- XmlHierarchyData.cs
- SoapRpcMethodAttribute.cs
- FragmentNavigationEventArgs.cs
- InputQueueChannel.cs
- Types.cs
- FieldNameLookup.cs
- BindingContext.cs
- TreeNodeClickEventArgs.cs
- ClientUtils.cs
- InvokeMethodActivity.cs
- ListControlConvertEventArgs.cs
- DrawingAttributeSerializer.cs
- SharedConnectionWorkflowTransactionService.cs
- XmlSecureResolver.cs
- UxThemeWrapper.cs
- QuaternionAnimationBase.cs
- SqlConnectionPoolProviderInfo.cs
- DocumentSequence.cs
- _NetworkingPerfCounters.cs
- PageBuildProvider.cs
- StringPropertyBuilder.cs
- ExecutedRoutedEventArgs.cs
- NetworkInterface.cs
- ASCIIEncoding.cs
- CompressEmulationStream.cs
- safemediahandle.cs
- ObjectStateManager.cs
- ShellProvider.cs
- QilInvoke.cs
- WpfXamlType.cs
- DrawingCollection.cs
- TreeNode.cs
- AttachedAnnotationChangedEventArgs.cs
- DataGridRelationshipRow.cs
- SqlTypesSchemaImporter.cs
- HttpListenerResponse.cs
- TextRunCache.cs
- DataGridViewTextBoxColumn.cs
- DataGridTableCollection.cs
- CodeArrayIndexerExpression.cs
- OperationResponse.cs
- ScalarType.cs
- AuthorizationRule.cs
- ToggleButton.cs
- PositiveTimeSpanValidator.cs
- TranslateTransform3D.cs
- PropertyRef.cs
- TextCompositionManager.cs
- DbMetaDataCollectionNames.cs
- CacheDependency.cs
- CompositeCollectionView.cs
- RuleSettings.cs
- TrackingConditionCollection.cs
- ReaderOutput.cs
- DefaultEventAttribute.cs
- ChangeNode.cs
- StrongName.cs
- TransformConverter.cs
- TraceHwndHost.cs
- BamlWriter.cs
- WindowsTooltip.cs
- HandlerFactoryWrapper.cs
- ContentPlaceHolder.cs
- ApplicationContext.cs
- RemotingConfigParser.cs