Subject: Re: bug#11732: 24.1; Microsoft IME Japanese input problem

From: Eli Zaretskii <[email-masked]>
Date: Thu, 19 Feb 2015 08:44:01 +0200

> Date: Thu, 19 Feb 2015 11:03:58 +0900
> From: Fujii Hironori <[email-masked]>
> Cc: [email-masked]
> 
> >>         set_ime_composition_window_fn (context, &form);
> >>         release_ime_context_fn (hwnd, context);
> >>       }
> >> -      break;
> >> +      goto dflt;
> >>
> >>      case WM_IME_ENDCOMPOSITION:
> >>        ignore_ime_char = 0;
> >
> > Passes the message to DefWindowProc even if we succeeded to handle
> > WM_IME_STARTCOMPOSITION by calling ImmSetCompositionWindow.  Why is
> > that needed?
> 
> If Emacs processes WM_IME_STARTCOMPOSITION itself,
> default composition window won't be shown.
> 
> Please see the document for the detail.
> 
> https://msdn.microsoft.com/en-us/library/windows/desktop/dd374143%28v=vs.85%29.aspx
> 
> | Remarks
> |
> | This message is a notification to an IME window to open its
> | composition window. An application should process this message if it
> | displays composition characters itself.
> |
> | If an application has created an IME window, it should pass this
> | message to that window. The DefWindowProc function processes the
> | message by passing it to the default IME window.

Yes, I've read that, but it's still not clear to me what that mean in
practice.  Are you saying that ImmSetCompositionWindow only sets the
position of the composition window, but it will not be shown unless we
pass WM_IME_STARTCOMPOSITION to DefWindowProc?  In that case, how will
Windows know that the composition window we positioned is "the default
IME window"?

Or are you saying we should be calling ImmSetCompositionWindow at all?
That call was introduced as result of solving bugs #2570 and #2569, so
I think the call or its equivalent should stay.

Sorry I'm asking all these questions, but I don't know enough about
IME programming, and need to understand this in order to see that the
patch doesn't break anything else.

Thanks.