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
- FrameworkContentElement.cs
- login.cs
- EncryptedPackageFilter.cs
- AssemblyName.cs
- BufferedGraphicsManager.cs
- Module.cs
- ImageAttributes.cs
- WindowsTokenRoleProvider.cs
- CaseInsensitiveOrdinalStringComparer.cs
- ViewKeyConstraint.cs
- DataGridColumnHeaderAutomationPeer.cs
- WindowsListViewGroup.cs
- ErrorWrapper.cs
- GeneralTransform2DTo3DTo2D.cs
- TaskForm.cs
- TaskFormBase.cs
- RemotingServices.cs
- ListBoxItemAutomationPeer.cs
- DecimalSumAggregationOperator.cs
- PageContent.cs
- StandardToolWindows.cs
- DiagnosticTraceRecords.cs
- ComboBox.cs
- HandlerFactoryCache.cs
- DeviceContext2.cs
- CharAnimationBase.cs
- XsltOutput.cs
- HttpHandlersSection.cs
- GlyphsSerializer.cs
- PropertyMap.cs
- DataSourceGeneratorException.cs
- AppDomainManager.cs
- HeaderedContentControl.cs
- UnsafeNativeMethods.cs
- ToolStripItemCollection.cs
- PopupControlService.cs
- TextEditorLists.cs
- ExpandCollapseProviderWrapper.cs
- Block.cs
- MembershipSection.cs
- SubclassTypeValidatorAttribute.cs
- SymLanguageVendor.cs
- DifferencingCollection.cs
- WinInet.cs
- NameScope.cs
- WpfMemberInvoker.cs
- FlowDocumentReaderAutomationPeer.cs
- SemanticBasicElement.cs
- BindingListCollectionView.cs
- BmpBitmapEncoder.cs
- BulletedListEventArgs.cs
- CurrencyWrapper.cs
- Token.cs
- externdll.cs
- TemplatePartAttribute.cs
- ResourceCategoryAttribute.cs
- EventLogConfiguration.cs
- UpdateTracker.cs
- EntityDesignerDataSourceView.cs
- NavigationPropertyEmitter.cs
- ListBindableAttribute.cs
- SqlNotificationRequest.cs
- DescendentsWalker.cs
- sqlmetadatafactory.cs
- WebConfigurationManager.cs
- DataGridViewRowPrePaintEventArgs.cs
- ListViewItemSelectionChangedEvent.cs
- SchemaImporter.cs
- ContextItemManager.cs
- FileAuthorizationModule.cs
- DeploymentSection.cs
- DependsOnAttribute.cs
- ResourcesBuildProvider.cs
- dataobject.cs
- DataBindingValueUIHandler.cs
- XsdBuilder.cs
- TextParaLineResult.cs
- HtmlListAdapter.cs
- Int32Rect.cs
- ReadContentAsBinaryHelper.cs
- EntityDataSourceStatementEditor.cs
- TextBoxAutoCompleteSourceConverter.cs
- PasswordBoxAutomationPeer.cs
- ContextBase.cs
- AnnotationAdorner.cs
- Point3DAnimationUsingKeyFrames.cs
- Vector3D.cs
- IProvider.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- Logging.cs
- HostDesigntimeLicenseContext.cs
- HijriCalendar.cs
- EntityTypeBase.cs
- SessionEndedEventArgs.cs
- Vector3DConverter.cs
- PtsCache.cs
- DeviceContext2.cs
- SqlDataRecord.cs
- ObjectDataSourceFilteringEventArgs.cs
- FunctionQuery.cs