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
- RelatedView.cs
- WebPartConnectVerb.cs
- AssemblyCollection.cs
- ToggleButton.cs
- ControlHelper.cs
- ConsoleKeyInfo.cs
- CompositeFontParser.cs
- Token.cs
- EncryptedXml.cs
- GatewayDefinition.cs
- ImageFormat.cs
- OverflowException.cs
- PageCatalogPartDesigner.cs
- DataBindingExpressionBuilder.cs
- Variant.cs
- SqlDependencyUtils.cs
- DecryptedHeader.cs
- HttpCapabilitiesEvaluator.cs
- FlowDocumentPaginator.cs
- ShaderRenderModeValidation.cs
- StringInfo.cs
- MiniModule.cs
- XmlUtf8RawTextWriter.cs
- Brush.cs
- Properties.cs
- Link.cs
- ConstNode.cs
- EventLogHandle.cs
- HiddenFieldPageStatePersister.cs
- Misc.cs
- ActivityTypeDesigner.xaml.cs
- DataGridPageChangedEventArgs.cs
- PrintDialogDesigner.cs
- ConfigurationLocation.cs
- followingsibling.cs
- ValueOfAction.cs
- XmlElement.cs
- Section.cs
- IisTraceListener.cs
- sqlinternaltransaction.cs
- mda.cs
- CodeTypeReference.cs
- DataGridViewCellCollection.cs
- StreamGeometry.cs
- XamlStackWriter.cs
- FontInfo.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- BounceEase.cs
- ColumnWidthChangedEvent.cs
- UriScheme.cs
- GACMembershipCondition.cs
- ResourceManager.cs
- TabletDeviceInfo.cs
- AppDomainProtocolHandler.cs
- IssuanceLicense.cs
- ZipIOCentralDirectoryBlock.cs
- DataControlPagerLinkButton.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- PerformanceCounter.cs
- TextParentUndoUnit.cs
- SqlSelectClauseBuilder.cs
- oledbconnectionstring.cs
- DependencyPropertyValueSerializer.cs
- IPEndPointCollection.cs
- WebPartChrome.cs
- ReflectionPermission.cs
- MinimizableAttributeTypeConverter.cs
- Pair.cs
- CodeFieldReferenceExpression.cs
- RegisteredScript.cs
- LocalTransaction.cs
- BitmapCodecInfoInternal.cs
- TextEditorSelection.cs
- DesignerSerializationVisibilityAttribute.cs
- StrongTypingException.cs
- UrlAuthFailedErrorFormatter.cs
- TableLayout.cs
- TextServicesCompartmentContext.cs
- DataSet.cs
- EventDescriptorCollection.cs
- PipelineComponent.cs
- SqlDataSourceAdvancedOptionsForm.cs
- DataIdProcessor.cs
- EUCJPEncoding.cs
- ControlAdapter.cs
- EntityContainerEmitter.cs
- RetrieveVirtualItemEventArgs.cs
- EllipseGeometry.cs
- DataGridViewColumnStateChangedEventArgs.cs
- SemanticResolver.cs
- WsiProfilesElement.cs
- ExpressionWriter.cs
- PropertyInfoSet.cs
- ScriptRegistrationManager.cs
- RuleSettings.cs
- TypeToken.cs
- OpCellTreeNode.cs
- Attribute.cs
- DataListItemCollection.cs
- ToolStripRenderer.cs