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
- MissingMethodException.cs
- ProviderConnectionPointCollection.cs
- DesignerDeviceConfig.cs
- BooleanExpr.cs
- QueryAccessibilityHelpEvent.cs
- Crypto.cs
- ListBindingConverter.cs
- DesignerCategoryAttribute.cs
- __TransparentProxy.cs
- TypeExtensionConverter.cs
- EnumerableRowCollection.cs
- AsymmetricAlgorithm.cs
- CharacterString.cs
- SqlEnums.cs
- EventRoute.cs
- DataSourceCache.cs
- SerializationFieldInfo.cs
- RectangleConverter.cs
- EditingCommands.cs
- CodeAttributeDeclaration.cs
- AssemblyAttributes.cs
- CodeParameterDeclarationExpressionCollection.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- WizardPanel.cs
- WebPartTransformerCollection.cs
- ConfigurationPermission.cs
- ExtendedProperty.cs
- BrowserCapabilitiesCompiler.cs
- DbParameterCollectionHelper.cs
- SQLString.cs
- RowToParametersTransformer.cs
- PartitionedDataSource.cs
- ConsumerConnectionPointCollection.cs
- ContentControl.cs
- SqlFileStream.cs
- TemplateControlParser.cs
- ConcurrentStack.cs
- RoleGroupCollection.cs
- ControlValuePropertyAttribute.cs
- HttpCapabilitiesEvaluator.cs
- WS2007HttpBindingElement.cs
- ExpressionWriter.cs
- TextServicesCompartmentEventSink.cs
- DbConnectionFactory.cs
- COM2AboutBoxPropertyDescriptor.cs
- ScopedKnownTypes.cs
- CustomLineCap.cs
- ExternalException.cs
- IndicFontClient.cs
- HtmlTernaryTree.cs
- XmlSchemaNotation.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- SelectionRangeConverter.cs
- SQLDouble.cs
- GifBitmapEncoder.cs
- NotificationContext.cs
- DispatcherTimer.cs
- DbCommandDefinition.cs
- XsltContext.cs
- MessageDescriptionCollection.cs
- StringInfo.cs
- GlyphsSerializer.cs
- SafeSecurityHelper.cs
- PictureBox.cs
- HandleTable.cs
- WinFormsComponentEditor.cs
- LinkTarget.cs
- CaseStatementSlot.cs
- FileUtil.cs
- XmlIncludeAttribute.cs
- XmlDataDocument.cs
- RSAPKCS1SignatureFormatter.cs
- ComponentResourceKey.cs
- XslCompiledTransform.cs
- ParallelActivityDesigner.cs
- DesignerToolStripControlHost.cs
- DataGridViewButtonCell.cs
- ContextQuery.cs
- QuotedPrintableStream.cs
- MultipartIdentifier.cs
- SelfIssuedAuthAsymmetricKey.cs
- ErasingStroke.cs
- StringValueConverter.cs
- ConstNode.cs
- RoleExceptions.cs
- ProxySimple.cs
- WmlValidationSummaryAdapter.cs
- WebPartManagerInternals.cs
- DataServiceQueryProvider.cs
- SplineQuaternionKeyFrame.cs
- SemanticAnalyzer.cs
- Point3DValueSerializer.cs
- LinearQuaternionKeyFrame.cs
- ManagementObject.cs
- VoiceChangeEventArgs.cs
- TraceHwndHost.cs
- FillErrorEventArgs.cs
- MenuItemAutomationPeer.cs
- GeometryCollection.cs
- SuppressIldasmAttribute.cs