Hi Sergey, ALT_GRAPH_DOWN_MASK is not the only mask missing in JavaDoc. What is about META_DOWN_MASK? What if the developer, who does not care about ALT_GRAPH, forget about META too? Guess how your example will work on Mac. What is about the WORA slogan?
I believe that the example in the javadoc is not entirely correct. This is just a very simple example, related to the English locale on Windows (and possibly on Linux). It should not be used in multi-platform code. On Sun, Mar 17, 2019 at 1:26 AM Sergey Bylokhov <sergey.bylok...@oracle.com> wrote: > > On 16/03/2019 03:58, Sergey Malenkov wrote: > > Your example is synthetic and shows a problem in the one specific > > case. I think if you introduce new mask, you have to use it in your > > example too. If you add ALT_GRAPH_DOWN_MASK to 'offmask' your example > > will not work (that's how processed all shortcuts in Swing and IDEA). > > If you add it to 'onmask' the KeyEvent(new Button(), 0, 0, > > ALT_GRAPH_DOWN_MASK, 0) will not work. > > Your example is good as well, but it shows the opposite, if > ALT_GRAPH_DOWN_MASK was used as "onmask" or as "offmask" then it means > that this example tries to take care about altGr and it only > properly works after the fix. And if the code is unaware about the altGr > flag as in previous example it will be ignored. > > > Am I right that to support your specific case you have to find and fix > > all Alt-based shortcuts in Swing, we should fix all Alt-based > > shortcuts in all keymaps in our IDEs and we should notify all our > > users that they have to fix all Alt-based shortcuts in their custom > > keymaps? The brilliant example of backward compatibility! > > I do not remember all changes which were integrated since initially it was > done > ~4 years ago. But Swing was updated by some changes after that, for example: > https://bugs.openjdk.java.net/browse/JDK-8194873 > > > > >> So if the client will follow the spec below it should work as before, > >> isn't it?: > >> https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/InputEvent.html#getModifiersEx() > > > > If a developer use this method as described his code will be broken > > too, because good and attentive developer definitely added > > ALT_GRAPH_DOWN_MASK to 'offmask'. > > If the user wants to ignore all combinations with "Alternate Character Key" > then, as you pointed in the start of this thread, he should ignore both > "alt" since on macOS both alt keys are "Alternate Character Key". > > > > > On Sat, Mar 16, 2019 at 1:27 AM Sergey Bylokhov > > <sergey.bylok...@oracle.com> wrote: > >> > >> On 15/03/2019 05:54, Sergey Malenkov wrote: > >>> We have a major issue about unexpected AltGr in the keyboard layout > >>> that should not have AltGr at all: > >>> http://youtrack.jetbrains.com/issue/IDEA-206348 > >>> Why you decided to support AltGr for every keyboard layout? It really > >>> breaks backward compatibility! > >> > >> Even in your bug report the people complain that altGr key does not work, > >> and > >> the only problem here is that it does not assigned by default. > >> But on the other side it is possible to set separate shortcuts > >> to the "Alt + Alt Graph + Enter"and "Alt + Enter": > >> > >>> I think the main client is Swing and pressed AltGr that looks like > >>> 'Alt+AltGr+' breaks all Alt-based shortcuts defined in > >>> javax.swing.plaf.basic.BasicLookAndFeel#initComponentDefaults and > >>> other places. Now, if you press "alt LEFT", the "moveColumnLeft" > >>> action is performed only for the left Alt. And this also breaks a > >>> backward compatibility. > >> > >> The term "all" is not so critical, there are only few such shortcuts, and > >> it is > >> a good thing that potentially we can set different shortcuts for each. > >> This is a bug that these places were not updated, it is easy to fix since > >> this > >> is not exposed via public API. > >> But we will get the same result if we will use the AltGr mask only. > >> > >>> It is not backward compatible to use AltGr instead of right Alt in > >>> both cases. Instead of 'Alt+key' you will get 'AltGr+key' or > >>> 'Alt+AltGr+key', which are not bound to any action. > >> > >> It is compatible to the specification of InputEvent.getModifiersEx(): > >> KeyEvent event = new KeyEvent(new Button(), 0, 0, > >> ALT_DOWN_MASK | ALT_GRAPH_DOWN_MASK, 0); > >> int onmask = ALT_DOWN_MASK; > >> int offmask = CTRL_DOWN_MASK|SHIFT_DOWN_MASK; > >> if ((event.getModifiersEx() & (onmask | offmask)) == onmask) { > >> ... > >> } > >> > >> The code above works before and after the change for altGr. > >> But it will stop working if we will use altGr only, and it will be hard to > >> argue > >> why the ALT flag is not set while alt key is pressed(since on some > >> keyboards this key is > >> marked as alt and on some other altGr). > >> > >> And as specially noted in the method above the code should not assume which > >> flags(and how many) were set by the actions, if such assumptions exists in > >> Swing itself they should be fixed as well. > >> > >>> > >>> On Fri, Mar 15, 2019 at 9:27 AM Krishna Addepalli > >>> <krishna.addepa...@oracle.com> wrote: > >>>> > >>>> Hi Sergey Malenkov, > >>>> > >>>>> 'Alt+AltGr+Right' does nothing, because we do not assign this shortcut > >>>>> yet > >>>> In my personal experience, I did not find any instance, wherein a > >>>> shortcut had left and right alt in it. > >>>> Although it is not impossible, it seems weird to define such shortcuts. > >>>> It would be helpful if you could point to some resources, wherein > >>>> defining such shortcuts is acceptable. > >>>> > >>>> Thanks, > >>>> Krishna > >>>> > >>>>> On 14-Mar-2019, at 4:03 PM, Sergey Malenkov <malen...@gmail.com> wrote: > >>>>> > >>>>> I strongly don't like two masks for one key. If you press VK_ALT, > >>>>> ALT_DOWN_MASK should be set. If you press VK_SHIFT then, > >>>>> SHIFT_DOWN_MASK should be added to indicate that both keys are > >>>>> pressed. And if you press VK_ALT_GRAPH, only ALT_GRAPH_DOWN_MASK > >>>>> should be added. Otherwise, you can't distinguish the following key > >>>>> strokes: 'AltGr+Right' and 'Alt+AltGr+Right'. But these keystrokes are > >>>>> different and should invoke different actions. For example, > >>>>> 'Alt+Right' moves cursor to the next word > >>>>> 'Alt+Shift+Right' moves cursor to the next word AND adds all skipped > >>>>> characters to selection > >>>>> 'Alt+AltGr+Right' does nothing, because we do not assign this shortcut > >>>>> yet > >>>>> > >>>>> On Thu, Mar 14, 2019 at 12:09 AM Sergey Bylokhov > >>>>> <sergey.bylok...@oracle.com> wrote: > >>>>>> > >>>>>> On 13/03/2019 03:59, Sergey Malenkov wrote: > >>>>>>> I missed the "for ALT keys" in the bug title and thought that > >>>>>>> "KeyEvent.getModifiers() returns inconsistent values" was about > >>>>>>> incompatible behaviour on different platforms. In fact, JDK-8218917 > >>>>>>> should be renamed to something like “The right Alt key on Mac should > >>>>>>> behave as Alt and must not break the left Alt key processing”. > >>>>>> > >>>>>> But the "right Alt" should behave like a "left alt" already, it should > >>>>>> use both flags: > >>>>>> the common alt(ALT_DOWN_MASK) and the altGr(ALT_GRAPH_DOWN_MASK). > >>>>>> > >>>>>> So if the client will follow the spec below it should work as before, > >>>>>> isn't it?: > >>>>>> https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/InputEvent.html#getModifiersEx() > >>>>>> > >>>>>>> On Wed, Mar 13, 2019 at 6:57 AM Sergey Bylokhov > >>>>>>> <sergey.bylok...@oracle.com> wrote: > >>>>>>>> > >>>>>>>> On 12/03/2019 12:28, Sergey Malenkov wrote: > >>>>>>>>> Hi Sergey, > >>>>>>>>> > >>>>>>>>> 1. macOS uses a regular Alt key as "Alternate Character Key". This > >>>>>>>>> is > >>>>>>>>> the reason why JDK Toolkit defines Ctrl+Alt to select a mnemonic, > >>>>>>>>> instead of simple Alt. See > >>>>>>>>> https://sites.google.com/site/malenkov/java/141229 > >>>>>>>> > >>>>>>>> Right, but introducing this flag for the "left alt" could cause even > >>>>>>>> more > >>>>>>>> issues, so this flag is set only for the right. > >>>>>>>> > >>>>>>>>> 3. Regression was caused by adding AltGr to key processing on Mac. > >>>>>>>>> But > >>>>>>>>> I found more issues with inconsistent key processing on different > >>>>>>>>> platforms. See http://sites.google.com/site/malenkov/java/190312 > >>>>>>>> > >>>>>>>> Not sure that CAPS_LOCK is related. > >>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Tue, Mar 12, 2019 at 4:17 AM Sergey Bylokhov > >>>>>>>>> <sergey.bylok...@oracle.com> wrote: > >>>>>>>>>> > >>>>>>>>>> On 11/03/2019 17:37, Philip Race wrote: > >>>>>>>>>>> The debate is about AltGraph which an ancient MS-DOSism for > >>>>>>>>>>> asking for an ALTernate GRAPHics bitmap font - all pre-dates > >>>>>>>>>>> windows > >>>>>>>>>>> and I am sure has never been applicable to any MacOS. > >>>>>>>>>> > >>>>>>>>>> It also about the "right alt" which is also know as "AltGraph". I > >>>>>>>>>> guess currently > >>>>>>>>>> it is implemented as "right alt" on Linux/macOS/windows. > >>>>>>>>>> > >>>>>>>>>> BTW on linux it is also named as "Alternative Characters Key": > >>>>>>>>>> https://help.ubuntu.com/community/ComposeKey > >>>>>>>>>> > >>>>>>>>>>> So someone needs to properly explain why we would claim a Mac > >>>>>>>>>>> keyboard > >>>>>>>>>>> is OK to generate a keycode it doesn't have and cause a slew of > >>>>>>>>>>> regressions > >>>>>>>>>>> in the process ...> > >>>>>>>>>>> If Mac doesn't distinguish these two, we should generate the same > >>>>>>>>>>> keycode for both. > >>>>>>>>>> > >>>>>>>>>> The macOS supports "right alt", otherwise it would not be possible > >>>>>>>>>> to implement it in java: > >>>>>>>>>> https://developer.apple.com/library/archive/technotes/tn2450/_index.html > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>>> One could suppose there is a difference else why two keys, but > >>>>>>>>>>> what is the right > >>>>>>>>>>> thing to do here that fixes all the problems. What exactly WAS > >>>>>>>>>>> the problem > >>>>>>>>>>> with what was there in the first place ? And if changing it is > >>>>>>>>>>> correct why is it > >>>>>>>>>>> causing regressions ? > >>>>>>>>>> > >>>>>>>>>> Regressions were caused by the bugs in the fix implementation, or > >>>>>>>>>> am I missed something? > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> -phil. > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> On 3/12/19, 5:34 AM, Sergey Bylokhov wrote: > >>>>>>>>>>>> Hi, Phil. > >>>>>>>>>>>> On 11/03/2019 07:43, Philip Race wrote: > >>>>>>>>>>>>> The reasoning that AltGraph might be useful to someone is a bit > >>>>>>>>>>>>> weak > >>>>>>>>>>>>> and I don't think I'd want to support it via system property or > >>>>>>>>>>>>> build options. > >>>>>>>>>>>>> > >>>>>>>>>>>>> If its not a platform keyboard key, why do we need it ? > >>>>>>>>>>>> > >>>>>>>>>>>> The "AltGraph" key is also commonly referred to as "Right Alt", > >>>>>>>>>>>> and > >>>>>>>>>>>> it has been implemented on all platforms as a "Right Alt", it is > >>>>>>>>>>>> convenient to > >>>>>>>>>>>> distinguish the left/right alts. > >>>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> -- > >>>>>>>>>> Best regards, Sergey. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> -- > >>>>>>>> Best regards, Sergey. > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Best regards, Sergey. > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> Best regards, > >>>>> Sergey A. Malenkov > >>>> > >>> > >>> > >> > >> > >> -- > >> Best regards, Sergey. > > > > > > > > > -- > Best regards, Sergey. -- Best regards, Sergey A. Malenkov