Beispiel #1
0
        void CreateContext()
        {
            ClearContext();             // clear old context if necessary
            if (!textArea.Options.EnableImeSupport)
            {
                return;
            }
            hwndSource = (HwndSource)PresentationSource.FromVisual(this.textArea);
            if (hwndSource != null)
            {
                //currentContext = ImeNativeWrapper.ImmCreateContext();
                //previousContext = ImeNativeWrapper.AssociateContext(hwndSource, currentContext);
                currentContext = ImeNativeWrapper.GetContext(hwndSource);
                hwndSource.AddHook(WndProc);
                // UpdateCompositionWindow() will be called by the caret becoming visible

                var threadMgr = ImeNativeWrapper.GetTextFrameworkThreadManager();
                if (threadMgr != null)
                {
                    // Even though the docu says passing null is invalid, this seems to help
                    // activating the IME on the default input context that is shared with WPF
                    threadMgr.SetFocus(IntPtr.Zero);
                }
            }
        }
Beispiel #2
0
 public void OnLostFocus(KeyboardFocusChangedEventArgs e)
 {
     if (e.OldFocus == textArea && currentContext != IntPtr.Zero)
     {
         ImeNativeWrapper.NotifyIme(currentContext);
     }
     ClearContext();
 }
Beispiel #3
0
 public void UpdateCompositionWindow()
 {
     if (currentContext != IntPtr.Zero)
     {
         ImeNativeWrapper.SetCompositionFont(hwndSource, currentContext, textArea);
         ImeNativeWrapper.SetCompositionWindow(hwndSource, currentContext, textArea);
     }
 }
Beispiel #4
0
 void ClearContext()
 {
     if (hwndSource != null)
     {
         //ImeNativeWrapper.AssociateContext(hwndSource, previousContext);
         //ImeNativeWrapper.ImmDestroyContext(currentContext);
         ImeNativeWrapper.ReleaseContext(hwndSource, currentContext);
         currentContext = IntPtr.Zero;
         hwndSource.RemoveHook(WndProc);
         hwndSource = null;
     }
 }