View Issue Details

IDProjectCategoryView StatusLast Update
0035682LazarusPackagespublic2019-06-11 13:32
ReporterAlexey Tor.Assigned ToMartin Friebe 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionnot fixable 
Product Version2.1 (SVN)Product Build 
Target VersionFixed in Version2.0.4 
Summary0035682: SynEdit: Win10 Emoji popup position is wrong
DescriptionWin10 has added the Emoji dialog by hotkey Windows+dot. Since 2017.
SynEdit shows it at random pos, while it must be like IME dialog, near the caret.

Stackoverflow user: the function to set position, is probably ImmSetCandidateWindow
TagsNo tags attached.
Fixed in Revision61340
LazTarget2.0.4
Widgetset
Attached Files

Activities

Martin Friebe

2019-06-07 19:30

manager   ~0116612

Please test and close if ok

Alexey Tor.

2019-06-08 16:16

reporter   ~0116628

Not fully fixed
- Place caret, call Emoji dlg first time - position is ok
- move caret (using mouse click), call Emoji dlg - position is _old_

Martin Friebe

2019-06-08 16:49

manager   ~0116629

Last edited: 2019-06-08 16:58

View 3 revisions

Not sure how to reproduce.

Is that reproducible in
- The IDE
- A SynEdit in a projcet

- With full IME
- With basic IME (Option "IME handled by System")


In the IDE (with full IME / the original Issue was about full IME) I tried all of the following

- Open the IME (Windows Key + ; ) => Position OK
- Move caret by mouse (while IME is open (ideally IDE would close IME, but it does not)
- (Re-)Open the IME (Windows Key + ; ) => Position OK
  The IME close when pressing the windows key, and re-opens when pressing ";"

- Open the IME (Windows Key + ; ) => Position OK
- escape to close IME
- Move caret by mouse (while IME is open (ideally IDE would close IME, but it does not)
- (Re-)Open the IME (Windows Key + ; ) => Position OK

- Open the IME (Windows Key + ; ) => Position OK
- type "heart" + return
- close IME with mouse / "X" button in IME
- Move caret by mouse (while IME is open (ideally IDE would close IME, but it does not)
- (Re-)Open the IME (Windows Key + ; ) => Position OK


--
The Windows + ; is owed to my custom "dovrak+uk punctuation".

--
Also: Do you use some sort of remote access to your Win system?

Alexey Tor.

2019-06-08 17:13

reporter   ~0116630

Last edited: 2019-06-08 17:15

View 2 revisions

I use Win10 Pro Russian. with installed Japanese input.
Work in the IDE source editor.
I click 1st pos, call Windows+dot dialog, pos OK. I close dlg. Moved caret, call Windows+dot again, pos is _old_ (from 1st dialog call). Close dlg. Next caret move, call Windows+dot, pos id old.
I didnot change "option of full IME".

Alexey Tor.

2019-06-08 17:24

reporter   ~0116631

Win10 build 1903.

Martin Friebe

2019-06-08 18:16

manager   ~0116632

Please compile the IDE with
-dWinIMEDebug -dVerboseKeys -dSynMouseEvents

Start the IDE with --debug-log=c:\yourlogfile.txt

Before you open the IME the first time, enter START (so I can find the logged keys)
After you open (and close) the IME the 2nd time, enter END

Please attach the log.

---
It may be something with the latest Win 1903. I am on a deferred update cycle.
If that is the case it may take a while until I get the error.

Martin Friebe

2019-06-08 18:36

manager   ~0116633

Interesting: I can reproduce the issue you have in LibreOffice. Do you have that, can you test?

Also there a cases (both SynEdit and L.O.) where the IME does not close, when using the taskbar to activate another window.

Alexey Tor.

2019-06-08 19:25

reporter   ~0116635

Here is log.

debug.log (5,315 bytes)

Martin Friebe

2019-06-08 20:03

manager   ~0116636

You opened 3 times?

######## SSMETA UP => IME OPEN
[TCustomSynEdit.KeyUp] 91 Shift=False Ctrl=False Alt=False
####### x pos (in chars) = 23 / in pixel 514
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 23 514
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 23 514
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 23 514
TCustomSynEdit.WMImeNotify IMN_CLOSECANDIDATE, 1 , 4
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 23 514
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 23 514
######## ESCAPE
[TCustomSynEdit.KeyUp] 27 Shift=False Ctrl=False Alt=False

######## SSMETA
[TCustomSynEdit.KeyDown] 91 [ssMeta]
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 32 586
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 32 586
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 32 586
[TCustomSynEdit.KeyUp] 190 Shift=False Ctrl=False Alt=False
[TCustomSynEdit.KeyUp] 91 Shift=False Ctrl=False Alt=False
######## SSMETA UP => IME OPEN
######## x = 32
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 32 586
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 32 586
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 32 586
######## ESCAPE
[TCustomSynEdit.KeyUp] 27 Shift=False Ctrl=False Alt=False

[TCustomSynEdit.KeyDown] 91 [ssMeta]
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 45 690
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 45 690
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 45 690
[TCustomSynEdit.KeyUp] 190 Shift=False Ctrl=False Alt=False
[TCustomSynEdit.KeyUp] 91 Shift=False Ctrl=False Alt=False
######## SSMETA UP => IME OPEN
######## x = 45
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 45 690
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 45 690
--- TCustomSynEdit.WMImeRequest ** IMR_QUERYCHARPOSITION 0 45 690
[TCustomSynEdit.KeyUp] 27 Shift=False Ctrl=False Alt=False


After each escape, when you press down ssmeta, the IME already sends requests for IMR_QUERYCHARPOSITION.
On my System, this pos is used to determinate where the IME window should open.

If the X positions are correct, according to where you placed the caret, then the editor did return the correct coordinates.
I am not sure why the window would be misplaced.

--------
The only app on my system that gets the emoticon IME right is firefox. (chrome, notepad++, libre-office have all some flaws / mostly not closing it)

If you are interested, here are the firefox sources
https://fossies.org/linux/firefox/widget/windows/IMMHandler.h
https://dxr.mozilla.org/mozilla-central/source/widget/windows/IMMHandler.cpp

Alexey Tor.

2019-06-08 20:09

reporter   ~0116637

yes, seems 3 times (and last 2 times I got old dialog position).

Martin Friebe

2019-06-08 20:18

manager   ~0116638

Last edited: 2019-06-08 20:18

View 2 revisions

Well the editor supplied the new ones.

There is no explicit doc, for what the IME uses the IMR_QUERYCHARPOSITION. But it does all other windows according to that. (And on my system, also the emoticons).
I also found no way to close the emoticons, if the caret is moved by mouse while the list is open.

For now the issue will be deferred.

Martin Friebe

2019-06-10 11:46

manager   ~0116656

Ok, I updated from 1803 to 1809 (yes I get my update deferred).
Now the IME closes correctly. In fact Windows now prevents any other user input to the app, if the emoticon IME is open (and same for clipboard history.

Alexey Tor.

2019-06-11 12:25

reporter   ~0116674

I dont understand your message.

But. Win10 build 1803 - emoji position is ok. So issue is Win10 issue, not Laz issue. close it.

Martin Friebe

2019-06-11 13:32

manager   ~0116675

To conclude:

The feature was introduced in 1803 (and the multi clipboard was introduced in 1809)

1809 had some fixes on the windows site. Such as
- closing the IME, if the app is de-activated (switching to other app)
- preventing the app from receiving any input (such as scroll, or mouse click) while the IME is open
  This means the app will not get out of sync with the IME, as the app will not have a reason to scroll or change caret pos, while the IME is open.

Both use the IME API. Or it seems they use part of it.
Under 1803 and 1809 SynEdit acts like other applications (libre office, chrome, notepad++). In some case SynEdit acts better.
Only firefox was able to control the IME better (under 1803). Not sure why/how.

I can not yet test 1903 myself.

According to your log, and my tests: Under all versions of windows the IME enquires IMR_QUERYCHARPOSITION *before* the IME window opens.
It is not clear why 1903 would not correctly use this info.

--------
I did test ImmSetCandidateWindow, but it had no effect.

I was unable to make the emoticon IME react to
ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_COMPLETE, 0)
or CPS_CANCEL

The latter is no longer needed in 1809, because the IME now gets closed by the OS.

-------
One last note:

The emoticon IME only informs the app, when you start typing with the IME open.
That is:
- win+dot
  => the app receives IMR_QUERYCHARPOSITION. But the app is not actually informed that the IME is active.
- start typing "heart" to select an emoticon
  => The app receives "StartComposition"

This means it is possible that the IME acts differently, depending on whether input was made or not (I am not aware of such differences, but it might be useful to test)

Issue History

Date Modified Username Field Change
2019-06-07 11:52 Alexey Tor. New Issue
2019-06-07 12:53 Martin Friebe Assigned To => Martin Friebe
2019-06-07 12:53 Martin Friebe Status new => assigned
2019-06-07 19:30 Martin Friebe Status assigned => resolved
2019-06-07 19:30 Martin Friebe Resolution open => fixed
2019-06-07 19:30 Martin Friebe Fixed in Version => 2.0.4
2019-06-07 19:30 Martin Friebe Fixed in Revision => 61340
2019-06-07 19:30 Martin Friebe LazTarget => 2.0.4
2019-06-07 19:30 Martin Friebe Note Added: 0116612
2019-06-08 16:15 Alexey Tor. Status resolved => closed
2019-06-08 16:16 Alexey Tor. Status closed => assigned
2019-06-08 16:16 Alexey Tor. Resolution fixed => reopened
2019-06-08 16:16 Alexey Tor. Note Added: 0116628
2019-06-08 16:49 Martin Friebe Status assigned => feedback
2019-06-08 16:49 Martin Friebe Note Added: 0116629
2019-06-08 16:52 Martin Friebe Note Edited: 0116629 View Revisions
2019-06-08 16:58 Martin Friebe Note Edited: 0116629 View Revisions
2019-06-08 17:13 Alexey Tor. Note Added: 0116630
2019-06-08 17:13 Alexey Tor. Status feedback => assigned
2019-06-08 17:15 Alexey Tor. Note Edited: 0116630 View Revisions
2019-06-08 17:24 Alexey Tor. Note Added: 0116631
2019-06-08 18:16 Martin Friebe Status assigned => feedback
2019-06-08 18:16 Martin Friebe Note Added: 0116632
2019-06-08 18:36 Martin Friebe Note Added: 0116633
2019-06-08 19:25 Alexey Tor. File Added: debug.log
2019-06-08 19:25 Alexey Tor. Note Added: 0116635
2019-06-08 19:25 Alexey Tor. Status feedback => assigned
2019-06-08 20:03 Martin Friebe Note Added: 0116636
2019-06-08 20:09 Alexey Tor. Note Added: 0116637
2019-06-08 20:18 Martin Friebe Note Added: 0116638
2019-06-08 20:18 Martin Friebe Note Edited: 0116638 View Revisions
2019-06-10 11:46 Martin Friebe Note Added: 0116656
2019-06-11 12:25 Alexey Tor. Note Added: 0116674
2019-06-11 13:32 Martin Friebe Status assigned => resolved
2019-06-11 13:32 Martin Friebe Note Added: 0116675
2019-06-11 13:32 Martin Friebe Resolution reopened => not fixable