Re: Accelerators - odd behavior

2014-09-27 Thread Tomas Mikula
On Sat, Sep 27, 2014 at 12:02 AM, Kevin Rushforth
kevin.rushfo...@oracle.com wrote:
 Can you add this information to the JIRA?

 https://javafx-jira.kenai.com/browse/RT-38830

I added it to https://javafx-jira.kenai.com/browse/RT-27602.

Tomas


 Thanks.

 -- Kevin


 Tomas Mikula wrote:

 Anyway, the algorithm used in KeyCharacterCombination looks odd to me.

 What it does is it tries to find a key code capable of producing the
 character and then compares it to the event's key code.

 It would make more sense to me if it took the event, converted it to a
 character it produced and then compare the characters.

 This way your first attempt to capture both MINUS and SUBTRACT with a
 single KeyCharacterCombination(-) would work, as well as capturing
 all of Shift-EQUALS, PLUS, ADD with a single
 KeyCharacterCombination(+).

 Tomas

 On Fri, Sep 26, 2014 at 9:11 PM, Tomas Mikula tomas.mik...@gmail.com
 wrote:


 That doesn't explain why this isn't happening for PLUS.


 KeyCodeCombination(KeyCode.PLUS, KeyCombination.CONTROL_DOWN)

 is never matched. It might even be impossible to get a KEY_PRESSED
 event with key code PLUS with English keyboard layout. When I switch
 keyboard layout to Slovak, which has the '+' sign accessible without
 Shift, I do get the runnable fired twice.

 Best,
 Tomas



Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a KeyCombination
can only have one runnable associated with it, but the logic in Map doesn't
see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott


Re: Accelerators - odd behavior

2014-09-26 Thread Kevin Rushforth
It seems to me that this is working as designed. You have created two 
different KeyCombinations and asked that both fire your runnable. 
Further, both of the KeyCombinations match your key input since both a 
KeyPressed and a KeyTyped event are sent when pressing a key that has an 
associated character. I'm not sure how we could change it in a way that 
wouldn't be surprising or difficult to specify or document.


-- Kevin


Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a KeyCombination
can only have one runnable associated with it, but the logic in Map doesn't
see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott
  


Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
What is very interesting about this is that I can't duplicate it with the
+ character.
I've added all of the following to the scene accelerators and it still only
fires my plus action once for each press.

KeyCombination cmdPlus = new KeyCodeCombination(KeyCode.PLUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdAdd = new KeyCodeCombination(KeyCode.ADD,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdPlusAsShiftEquals = new
KeyCodeCombination(KeyCode.EQUALS, KeyCombination.CONTROL_DOWN,
KeyCodeCombination.SHIFT_DOWN);
KeyCombination cmdPlusFromCharacter = new KeyCharacterCombination(+,
KeyCombination.CONTROL_DOWN);

This is weird.

On Fri, Sep 26, 2014 at 1:01 PM, Scott Palmer swpal...@gmail.com wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a KeyCombination
 can only have one runnable associated with it, but the logic in Map doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott




Re: Accelerators - odd behavior

2014-09-26 Thread Kevin Rushforth
This does seem somewhat strange. Do you get multiple calls to your 
runnable if you use a KeyCharacter combination and KeyCode combination 
for CTRL-a or other key that generates a key char without needing a shift?


-- Kevin


Scott Palmer wrote:

What is very interesting about this is that I can't duplicate it with the
+ character.
I've added all of the following to the scene accelerators and it still only
fires my plus action once for each press.

KeyCombination cmdPlus = new KeyCodeCombination(KeyCode.PLUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdAdd = new KeyCodeCombination(KeyCode.ADD,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdPlusAsShiftEquals = new
KeyCodeCombination(KeyCode.EQUALS, KeyCombination.CONTROL_DOWN,
KeyCodeCombination.SHIFT_DOWN);
KeyCombination cmdPlusFromCharacter = new KeyCharacterCombination(+,
KeyCombination.CONTROL_DOWN);

This is weird.

On Fri, Sep 26, 2014 at 1:01 PM, Scott Palmer swpal...@gmail.com wrote:

  

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a KeyCombination
can only have one runnable associated with it, but the logic in Map doesn't
see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott





Re: Accelerators - odd behavior

2014-09-26 Thread Tomas Mikula
Hi Scott,

On Fri, Sep 26, 2014 at 7:01 PM, Scott Palmer swpal...@gmail.com wrote:
 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

according to Javadoc for KeyCharacterCombination#match (which I was
recently reminded to read), this would not work anyway, since

The key character of this object is first translated to the key code
which is capable of producing the character in the current keyboard
layout and then the resulting key code together with the modifier keys
are matched against the key code and key modifiers from the KeyEvent.

It seems it just arbitrarily picks whatever key code can produce the character.

Best,
Tomas


Re: Accelerators - odd behavior

2014-09-26 Thread Stephen F Northover

I am only seeing the runnable fired once in FX 8u40.

Steve

Steps:

1) Run TestKeyCombination
2) Press Control+-

Here is the test code:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class TestKeyCombination extends Application {
public static void main(String[] args) {
Application.launch(args);
}

@Override public void start(Stage stage) {
stage.setTitle(Test KeyCombination);
Scene scene = new Scene(new Group(), 600, 450);
Button button1 = new Button();
button1.setText(Click Me);
stage.setScene(scene);
stage.show();

KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS, 
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);

Runnable runnable = () - System.out.println(HI);
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
}
}


On 2014-09-26, 1:01 PM, Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a KeyCombination
can only have one runnable associated with it, but the logic in Map doesn't
see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott




Re: Accelerators - odd behavior

2014-09-26 Thread Kevin Rushforth
Is this on a Mac or on Windows?  I just ran your test case and I get two 
runnables, which is what I would expect.


-- Kevin


Stephen F Northover wrote:

I am only seeing the runnable fired once in FX 8u40.

Steve

Steps:

1) Run TestKeyCombination
2) Press Control+-

Here is the test code:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class TestKeyCombination extends Application {
public static void main(String[] args) {
Application.launch(args);
}

@Override public void start(Stage stage) {
stage.setTitle(Test KeyCombination);
Scene scene = new Scene(new Group(), 600, 450);
Button button1 = new Button();
button1.setText(Click Me);
stage.setScene(scene);
stage.show();

KeyCombination cmdMinus = new 
KeyCodeCombination(KeyCode.MINUS, KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);

Runnable runnable = () - System.out.println(HI);
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
}
}


On 2014-09-26, 1:01 PM, Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
Key*Character*Combination(-,

KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a 
KeyCombination
can only have one runnable associated with it, but the logic in Map 
doesn't

see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott




Re: Accelerators - odd behavior

2014-09-26 Thread Tomas Mikula
Hi Kevin,


On Fri, Sep 26, 2014 at 7:16 PM, Kevin Rushforth
kevin.rushfo...@oracle.com wrote:
 It seems to me that this is working as designed. You have created two
 different KeyCombinations and asked that both fire your runnable. Further,
 both of the KeyCombinations match your key input since both a KeyPressed and
 a KeyTyped event are sent when pressing a key that has an associated
 character. I'm not sure how we could change it in a way that wouldn't be
 surprising or difficult to specify or document.

The Javadoc for KeyCharacterCombination#match also says

This means that the method can return true only for KEY_PRESSED
andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
valid key codes.

Thus it is probably not related to KEY_TYPED events.

Tomas


 -- Kevin



 Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott



Re: Accelerators - odd behavior

2014-09-26 Thread Stephen F Northover

This is on Mac.  Will try Windows.

Steve

On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:
Is this on a Mac or on Windows?  I just ran your test case and I get 
two runnables, which is what I would expect.


-- Kevin


Stephen F Northover wrote:

I am only seeing the runnable fired once in FX 8u40.

Steve

Steps:

1) Run TestKeyCombination
2) Press Control+-

Here is the test code:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class TestKeyCombination extends Application {
public static void main(String[] args) {
Application.launch(args);
}

@Override public void start(Stage stage) {
stage.setTitle(Test KeyCombination);
Scene scene = new Scene(new Group(), 600, 450);
Button button1 = new Button();
button1.setText(Click Me);
stage.setScene(scene);
stage.show();

KeyCombination cmdMinus = new 
KeyCodeCombination(KeyCode.MINUS, KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);

Runnable runnable = () - System.out.println(HI);
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
}
}


On 2014-09-26, 1:01 PM, Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
Key*Character*Combination(-,

KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a 
KeyCombination
can only have one runnable associated with it, but the logic in Map 
doesn't

see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both 
type

the same Character and only one accelerator can be set on a MenuItem.

Scott






Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
I'm on Windows 7.

On Fri, Sep 26, 2014 at 1:25 PM, Stephen F Northover 
steve.x.northo...@oracle.com wrote:

 This is on Mac.  Will try Windows.

 Steve


 On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:

 Is this on a Mac or on Windows?  I just ran your test case and I get two
 runnables, which is what I would expect.

 -- Kevin


 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a
 KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott






Fwd: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
Forgot to include the list.

(I'm testing with 8u20 btw)

-- Forwarded message --
From: Scott Palmer swpal...@gmail.com
Date: Fri, Sep 26, 2014 at 1:25 PM
Subject: Re: Accelerators - odd behavior
To: Kevin Rushforth kevin.rushfo...@oracle.com


Yes, for CTRL+a I do see it fire twice.

On Fri, Sep 26, 2014 at 1:21 PM, Kevin Rushforth kevin.rushfo...@oracle.com
 wrote:

 This does seem somewhat strange. Do you get multiple calls to your
 runnable if you use a KeyCharacter combination and KeyCode combination for
 CTRL-a or other key that generates a key char without needing a shift?

 -- Kevin


 Scott Palmer wrote:

 What is very interesting about this is that I can't duplicate it with the
 + character.
 I've added all of the following to the scene accelerators and it still
 only
 fires my plus action once for each press.

 KeyCombination cmdPlus = new KeyCodeCombination(KeyCode.PLUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdAdd = new KeyCodeCombination(KeyCode.ADD,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdPlusAsShiftEquals = new
 KeyCodeCombination(KeyCode.EQUALS, KeyCombination.CONTROL_DOWN,
 KeyCodeCombination.SHIFT_DOWN);
 KeyCombination cmdPlusFromCharacter = new KeyCharacterCombination(+,
 KeyCombination.CONTROL_DOWN);

 This is weird.

 On Fri, Sep 26, 2014 at 1:01 PM, Scott Palmer swpal...@gmail.com wrote:



 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott







Re: Accelerators - odd behavior

2014-09-26 Thread Tomas Mikula
The explanation could be that on some systems the
KeyCharacterCombination(-).match picks the same key code as the one
produced by key press (e.g. MINUS), while on other systems it picks
the other one (SUBTRACT).

On Fri, Sep 26, 2014 at 7:24 PM, Kevin Rushforth
kevin.rushfo...@oracle.com wrote:
 Is this on a Mac or on Windows?  I just ran your test case and I get two
 runnables, which is what I would expect.

 -- Kevin



 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott





Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
While we are on the subject... Why does a Scene accelerator Map take
runnables instead of EventHandlers ?

Scott

On Fri, Sep 26, 2014 at 1:27 PM, Scott Palmer swpal...@gmail.com wrote:

 Forgot to include the list.

 (I'm testing with 8u20 btw)

 -- Forwarded message --
 From: Scott Palmer swpal...@gmail.com
 Date: Fri, Sep 26, 2014 at 1:25 PM
 Subject: Re: Accelerators - odd behavior
 To: Kevin Rushforth kevin.rushfo...@oracle.com


 Yes, for CTRL+a I do see it fire twice.

 On Fri, Sep 26, 2014 at 1:21 PM, Kevin Rushforth 
 kevin.rushfo...@oracle.com wrote:

 This does seem somewhat strange. Do you get multiple calls to your
 runnable if you use a KeyCharacter combination and KeyCode combination for
 CTRL-a or other key that generates a key char without needing a shift?

 -- Kevin


 Scott Palmer wrote:

 What is very interesting about this is that I can't duplicate it with the
 + character.
 I've added all of the following to the scene accelerators and it still
 only
 fires my plus action once for each press.

 KeyCombination cmdPlus = new KeyCodeCombination(KeyCode.PLUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdAdd = new KeyCodeCombination(KeyCode.ADD,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdPlusAsShiftEquals = new
 KeyCodeCombination(KeyCode.EQUALS, KeyCombination.CONTROL_DOWN,
 KeyCodeCombination.SHIFT_DOWN);
 KeyCombination cmdPlusFromCharacter = new KeyCharacterCombination(+,
 KeyCombination.CONTROL_DOWN);

 This is weird.

 On Fri, Sep 26, 2014 at 1:01 PM, Scott Palmer swpal...@gmail.com
 wrote:



 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a
 KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott









Re: Accelerators - odd behavior

2014-09-26 Thread Kevin Rushforth



This means that the method can return true only for KEY_PRESSED
andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
valid key codes.


Ah, I missed that. I would expect such a disclaimer for 
KeyCodeCombination but not for KeyTypedCombination. In any case, it 
still seems correct that two events are produced for the particular test 
case in question.


-- Kevin


Tomas Mikula wrote:

Hi Kevin,


On Fri, Sep 26, 2014 at 7:16 PM, Kevin Rushforth
kevin.rushfo...@oracle.com wrote:
  

It seems to me that this is working as designed. You have created two
different KeyCombinations and asked that both fire your runnable. Further,
both of the KeyCombinations match your key input since both a KeyPressed and
a KeyTyped event are sent when pressing a key that has an associated
character. I'm not sure how we could change it in a way that wouldn't be
surprising or difficult to specify or document.



The Javadoc for KeyCharacterCombination#match also says

This means that the method can return true only for KEY_PRESSED
andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
valid key codes.

Thus it is probably not related to KEY_TYPED events.

Tomas

  

-- Kevin



Scott Palmer wrote:


KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a KeyCombination
can only have one runnable associated with it, but the logic in Map
doesn't
see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott

  


Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
That would imply that 8u40 is broken (where '-' only fired once for
Stephen), or it's broken for the + key.

Scott

On Fri, Sep 26, 2014 at 1:29 PM, Kevin Rushforth kevin.rushfo...@oracle.com
 wrote:


  This means that the method can return true only for KEY_PRESSED
 andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
 valid key codes.


 Ah, I missed that. I would expect such a disclaimer for KeyCodeCombination
 but not for KeyTypedCombination. In any case, it still seems correct that
 two events are produced for the particular test case in question.

 -- Kevin



 Tomas Mikula wrote:

 Hi Kevin,


 On Fri, Sep 26, 2014 at 7:16 PM, Kevin Rushforthkevin.rushfo...@oracle.com 
 kevin.rushfo...@oracle.com wrote:


  It seems to me that this is working as designed. You have created two
 different KeyCombinations and asked that both fire your runnable. Further,
 both of the KeyCombinations match your key input since both a KeyPressed and
 a KeyTyped event are sent when pressing a key that has an associated
 character. I'm not sure how we could change it in a way that wouldn't be
 surprising or difficult to specify or document.


  The Javadoc for KeyCharacterCombination#match also says

 This means that the method can return true only for KEY_PRESSED
 andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
 valid key codes.

 Thus it is probably not related to KEY_TYPED events.

 Tomas



  -- Kevin



 Scott Palmer wrote:


  KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott






Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
Attached my test case...

On Fri, Sep 26, 2014 at 1:31 PM, Scott Palmer swpal...@gmail.com wrote:

 That would imply that 8u40 is broken (where '-' only fired once for
 Stephen), or it's broken for the + key.

 Scott

 On Fri, Sep 26, 2014 at 1:29 PM, Kevin Rushforth 
 kevin.rushfo...@oracle.com wrote:


  This means that the method can return true only for KEY_PRESSED
 andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
 valid key codes.


 Ah, I missed that. I would expect such a disclaimer for
 KeyCodeCombination but not for KeyTypedCombination. In any case, it still
 seems correct that two events are produced for the particular test case in
 question.

 -- Kevin



 Tomas Mikula wrote:

 Hi Kevin,


 On Fri, Sep 26, 2014 at 7:16 PM, Kevin Rushforthkevin.rushfo...@oracle.com 
 kevin.rushfo...@oracle.com wrote:


  It seems to me that this is working as designed. You have created two
 different KeyCombinations and asked that both fire your runnable. Further,
 both of the KeyCombinations match your key input since both a KeyPressed and
 a KeyTyped event are sent when pressing a key that has an associated
 character. I'm not sure how we could change it in a way that wouldn't be
 surprising or difficult to specify or document.


  The Javadoc for KeyCharacterCombination#match also says

 This means that the method can return true only for KEY_PRESSED
 andKEY_RELEASED events, but not for KEY_TYPED events, which don't have
 valid key codes.

 Thus it is probably not related to KEY_TYPED events.

 Tomas



  -- Kevin



 Scott Palmer wrote:


  KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott







Re: Accelerators - odd behavior

2014-09-26 Thread Stephen F Northover
Two on Windows, one on Mac.  See 
https://javafx-jira.kenai.com/browse/RT-38830


Steve

On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

This is on Mac.  Will try Windows.

Steve

On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:
Is this on a Mac or on Windows?  I just ran your test case and I get 
two runnables, which is what I would expect.


-- Kevin


Stephen F Northover wrote:

I am only seeing the runnable fired once in FX 8u40.

Steve

Steps:

1) Run TestKeyCombination
2) Press Control+-

Here is the test code:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class TestKeyCombination extends Application {
public static void main(String[] args) {
Application.launch(args);
}

@Override public void start(Stage stage) {
stage.setTitle(Test KeyCombination);
Scene scene = new Scene(new Group(), 600, 450);
Button button1 = new Button();
button1.setText(Click Me);
stage.setScene(scene);
stage.show();

KeyCombination cmdMinus = new 
KeyCodeCombination(KeyCode.MINUS, KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);

Runnable runnable = () - System.out.println(HI);
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
}
}


On 2014-09-26, 1:01 PM, Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
Key*Character*Combination(-,

KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a 
KeyCombination
can only have one runnable associated with it, but the logic in Map 
doesn't

see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both 
type

the same Character and only one accelerator can be set on a MenuItem.

Scott








Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
Okay.. so what is going on with Windows and CTRL+PLUS ?

Scott

On Fri, Sep 26, 2014 at 1:35 PM, Stephen F Northover 
steve.x.northo...@oracle.com wrote:

 Two on Windows, one on Mac.  See https://javafx-jira.kenai.com/
 browse/RT-38830

 Steve


 On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

 This is on Mac.  Will try Windows.

 Steve

 On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:

 Is this on a Mac or on Windows?  I just ran your test case and I get two
 runnables, which is what I would expect.

 -- Kevin


 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a
 KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both
 type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott







Re: Accelerators - odd behavior

2014-09-26 Thread Kevin Rushforth

It may or may not be a bug, but it will be good to investigate.

-- Kevin


Stephen F Northover wrote:
Two on Windows, one on Mac.  See 
https://javafx-jira.kenai.com/browse/RT-38830


Steve

On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

This is on Mac.  Will try Windows.

Steve

On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:
Is this on a Mac or on Windows?  I just ran your test case and I get 
two runnables, which is what I would expect.


-- Kevin


Stephen F Northover wrote:

I am only seeing the runnable fired once in FX 8u40.

Steve

Steps:

1) Run TestKeyCombination
2) Press Control+-

Here is the test code:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class TestKeyCombination extends Application {
public static void main(String[] args) {
Application.launch(args);
}

@Override public void start(Stage stage) {
stage.setTitle(Test KeyCombination);
Scene scene = new Scene(new Group(), 600, 450);
Button button1 = new Button();
button1.setText(Click Me);
stage.setScene(scene);
stage.show();

KeyCombination cmdMinus = new 
KeyCodeCombination(KeyCode.MINUS, KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);

Runnable runnable = () - System.out.println(HI);
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
}
}


On 2014-09-26, 1:01 PM, Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
Key*Character*Combination(-,

KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a 
KeyCombination
can only have one runnable associated with it, but the logic in 
Map doesn't

see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something 
that
worked for both MINUS and SUBTRACT simultaneously - since they 
both type

the same Character and only one accelerator can be set on a MenuItem.

Scott








Re: Accelerators - odd behavior

2014-09-26 Thread Kevin Rushforth


 Why does a Scene accelerator Map take runnables instead of 
EventHandlers ?


That's a good question. It's been that way since it was initially 
introduced in FX 2.0, and it seems at odds with the way other events are 
handled.


-- Kevin


Scott Palmer wrote:

While we are on the subject... Why does a Scene accelerator Map take
runnables instead of EventHandlers ?

Scott

On Fri, Sep 26, 2014 at 1:27 PM, Scott Palmer swpal...@gmail.com wrote:

  

Forgot to include the list.

(I'm testing with 8u20 btw)

-- Forwarded message --
From: Scott Palmer swpal...@gmail.com
Date: Fri, Sep 26, 2014 at 1:25 PM
Subject: Re: Accelerators - odd behavior
To: Kevin Rushforth kevin.rushfo...@oracle.com


Yes, for CTRL+a I do see it fire twice.

On Fri, Sep 26, 2014 at 1:21 PM, Kevin Rushforth 
kevin.rushfo...@oracle.com wrote:



This does seem somewhat strange. Do you get multiple calls to your
runnable if you use a KeyCharacter combination and KeyCode combination for
CTRL-a or other key that generates a key char without needing a shift?

-- Kevin


Scott Palmer wrote:

  

What is very interesting about this is that I can't duplicate it with the
+ character.
I've added all of the following to the scene accelerators and it still
only
fires my plus action once for each press.

KeyCombination cmdPlus = new KeyCodeCombination(KeyCode.PLUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdAdd = new KeyCodeCombination(KeyCode.ADD,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdPlusAsShiftEquals = new
KeyCodeCombination(KeyCode.EQUALS, KeyCombination.CONTROL_DOWN,
KeyCodeCombination.SHIFT_DOWN);
KeyCombination cmdPlusFromCharacter = new KeyCharacterCombination(+,
KeyCombination.CONTROL_DOWN);

This is weird.

On Fri, Sep 26, 2014 at 1:01 PM, Scott Palmer swpal...@gmail.com
wrote:





KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new
Key*Character*Combination(-,
KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same keypress.

I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a
KeyCombination
can only have one runnable associated with it, but the logic in Map
doesn't
see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something that
worked for both MINUS and SUBTRACT simultaneously - since they both type
the same Character and only one accelerator can be set on a MenuItem.

Scott




  



Re: Accelerators - odd behavior

2014-09-26 Thread Stephen F Northover
Agree.  Suggest that we move the discussion to the JIRA to capture the 
background information for whoever will address the bug.


Steve

On 2014-09-26, 1:41 PM, Kevin Rushforth wrote:

It may or may not be a bug, but it will be good to investigate.

-- Kevin


Stephen F Northover wrote:
Two on Windows, one on Mac.  See 
https://javafx-jira.kenai.com/browse/RT-38830


Steve

On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

This is on Mac.  Will try Windows.

Steve

On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:
Is this on a Mac or on Windows?  I just ran your test case and I 
get two runnables, which is what I would expect.


-- Kevin


Stephen F Northover wrote:

I am only seeing the runnable fired once in FX 8u40.

Steve

Steps:

1) Run TestKeyCombination
2) Press Control+-

Here is the test code:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class TestKeyCombination extends Application {
public static void main(String[] args) {
Application.launch(args);
}

@Override public void start(Stage stage) {
stage.setTitle(Test KeyCombination);
Scene scene = new Scene(new Group(), 600, 450);
Button button1 = new Button();
button1.setText(Click Me);
stage.setScene(scene);
stage.show();

KeyCombination cmdMinus = new 
KeyCodeCombination(KeyCode.MINUS, KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);

Runnable runnable = () - System.out.println(HI);
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
}
}


On 2014-09-26, 1:01 PM, Scott Palmer wrote:

KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
KeyCombination.CONTROL_DOWN);
KeyCombination cmdMinusFromCharacter = new 
Key*Character*Combination(-,

KeyCombination.CONTROL_DOWN);

Using the above like this:
scene.getAccelerators().put(cmdMinus, runnable);
scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

Will result in the runnable being fired twice from the same 
keypress.


I propose changing the accelerator processing logic so that only one
runnable gets called as the intention appears to be that a 
KeyCombination
can only have one runnable associated with it, but the logic in 
Map doesn't

see the above two KeyCombinations as the same key in the Map.

Note: With the second combination above I really wanted something 
that
worked for both MINUS and SUBTRACT simultaneously - since they 
both type
the same Character and only one accelerator can be set on a 
MenuItem.


Scott










Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
What started all this was that I sued CTRL +/- to zoom in and out in my
app.  People found that one press to zoom out needed two presses to zoom
back in.

If the behavior is platform-specific it will be awkward to deal with.
Specially since I want it to work with the numeric keypad as well.. so I
need to manually add accelerators to the scene apart from my MenuItem
accelerators.

Scott

On Fri, Sep 26, 2014 at 1:39 PM, Scott Palmer swpal...@gmail.com wrote:

 Okay.. so what is going on with Windows and CTRL+PLUS ?

 Scott

 On Fri, Sep 26, 2014 at 1:35 PM, Stephen F Northover 
 steve.x.northo...@oracle.com wrote:

 Two on Windows, one on Mac.  See https://javafx-jira.kenai.com/
 browse/RT-38830

 Steve


 On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

 This is on Mac.  Will try Windows.

 Steve

 On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:

 Is this on a Mac or on Windows?  I just ran your test case and I get
 two runnables, which is what I would expect.

 -- Kevin


 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a
 KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something that
 worked for both MINUS and SUBTRACT simultaneously - since they both
 type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott








Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
Please attach the test case I mailed earlier to the JIRA issue.

On Fri, Sep 26, 2014 at 1:42 PM, Stephen F Northover 
steve.x.northo...@oracle.com wrote:

 Agree.  Suggest that we move the discussion to the JIRA to capture the
 background information for whoever will address the bug.

 Steve


 On 2014-09-26, 1:41 PM, Kevin Rushforth wrote:

 It may or may not be a bug, but it will be good to investigate.

 -- Kevin


 Stephen F Northover wrote:

 Two on Windows, one on Mac.  See https://javafx-jira.kenai.com/
 browse/RT-38830

 Steve

 On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

 This is on Mac.  Will try Windows.

 Steve

 On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:

 Is this on a Mac or on Windows?  I just ran your test case and I get
 two runnables, which is what I would expect.

 -- Kevin


 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a
 KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something
 that
 worked for both MINUS and SUBTRACT simultaneously - since they both
 type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott








Re: Accelerators - odd behavior

2014-09-26 Thread Tomas Mikula
The cause of the problem seems clear to me. This is what I observe on
my (Linux) system.

Pressing '-' on the main part of the keyboard produces MINUS key code
pressed. Pressing '-' on the numeric keypad produces SUBTRACT key code
pressed.

KeyCharacterCombination(-) matches MINUS pressed, but does not match
SUBTRACT pressed (this is the part that may vary across systems, I
think. If on Mac it match SUBTRACT and not MINUS, it explains the
problem).

So in Scott's test case, when I press ordinary minus, MINUS pressed
event is fired, and both KeyCodeCombination(MINUS) and
KeyCharacterCombination(-) match, so the runnable is executed twice.

When, on the other hand, I pres minus on numeric keypad, SUBTRACT
pressed event is fired, and only KeyCodeCombination(SUBTRACT) matches,
so the runnable is executed only once.

To test this explanation, can someone please run the following program
on a Mac and post its output?


import static javafx.scene.input.KeyCode.*;
import static javafx.scene.input.KeyEvent.*;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyEvent;


public class KeyCodeForMinus {

public static void main(String[] args) {
new JFXPanel();

KeyCharacterCombination minusChar = new KeyCharacterCombination(-);
KeyEvent minusPressed = new KeyEvent(KEY_PRESSED, , ,
MINUS, false, false, false, false);
KeyEvent subtractPressed = new KeyEvent(KEY_PRESSED, , ,
SUBTRACT, false, false, false, false);

System.out.println('-' matches MINUS:  +
minusChar.match(minusPressed));
System.out.println('-' matches SUBTRACT:  +
minusChar.match(subtractPressed));

Platform.exit();
}

}

On Fri, Sep 26, 2014 at 7:44 PM, Scott Palmer swpal...@gmail.com wrote:
 Please attach the test case I mailed earlier to the JIRA issue.

 On Fri, Sep 26, 2014 at 1:42 PM, Stephen F Northover 
 steve.x.northo...@oracle.com wrote:

 Agree.  Suggest that we move the discussion to the JIRA to capture the
 background information for whoever will address the bug.

 Steve


 On 2014-09-26, 1:41 PM, Kevin Rushforth wrote:

 It may or may not be a bug, but it will be good to investigate.

 -- Kevin


 Stephen F Northover wrote:

 Two on Windows, one on Mac.  See https://javafx-jira.kenai.com/
 browse/RT-38830

 Steve

 On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

 This is on Mac.  Will try Windows.

 Steve

 On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:

 Is this on a Mac or on Windows?  I just ran your test case and I get
 two runnables, which is what I would expect.

 -- Kevin


 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the same keypress.

 I propose changing the accelerator processing logic so that only one
 runnable gets called as the intention appears to be that a
 KeyCombination
 can only have one runnable associated with it, but the logic in Map
 doesn't
 see the above two KeyCombinations as the same key in the Map.

 Note: With the second combination above I really wanted something
 that
 worked for both MINUS and SUBTRACT simultaneously - since they both
 type
 the same Character and only one accelerator can be set on a MenuItem.

 Scott








Re: Accelerators - odd behavior

2014-09-26 Thread Tomas Mikula
Here is a possible solution to Scott's original problem:


KeyCombination CtrlMinus = new KeyCombination(CONTROL_DOWN) {
@Override
public boolean match(KeyEvent event) {
return super.match(event)
 event.getEventType() == KEY_PRESSED
 (event.getCode() == MINUS || event.getCode() ==
SUBTRACT);
}
};

menuItem.setAccelerator(CtrlMinus);


On Fri, Sep 26, 2014 at 8:05 PM, Tomas Mikula tomas.mik...@gmail.com wrote:
 The cause of the problem seems clear to me. This is what I observe on
 my (Linux) system.

 Pressing '-' on the main part of the keyboard produces MINUS key code
 pressed. Pressing '-' on the numeric keypad produces SUBTRACT key code
 pressed.

 KeyCharacterCombination(-) matches MINUS pressed, but does not match
 SUBTRACT pressed (this is the part that may vary across systems, I
 think. If on Mac it match SUBTRACT and not MINUS, it explains the
 problem).

 So in Scott's test case, when I press ordinary minus, MINUS pressed
 event is fired, and both KeyCodeCombination(MINUS) and
 KeyCharacterCombination(-) match, so the runnable is executed twice.

 When, on the other hand, I pres minus on numeric keypad, SUBTRACT
 pressed event is fired, and only KeyCodeCombination(SUBTRACT) matches,
 so the runnable is executed only once.

 To test this explanation, can someone please run the following program
 on a Mac and post its output?


 import static javafx.scene.input.KeyCode.*;
 import static javafx.scene.input.KeyEvent.*;
 import javafx.application.Platform;
 import javafx.embed.swing.JFXPanel;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyEvent;


 public class KeyCodeForMinus {

 public static void main(String[] args) {
 new JFXPanel();

 KeyCharacterCombination minusChar = new KeyCharacterCombination(-);
 KeyEvent minusPressed = new KeyEvent(KEY_PRESSED, , ,
 MINUS, false, false, false, false);
 KeyEvent subtractPressed = new KeyEvent(KEY_PRESSED, , ,
 SUBTRACT, false, false, false, false);

 System.out.println('-' matches MINUS:  +
 minusChar.match(minusPressed));
 System.out.println('-' matches SUBTRACT:  +
 minusChar.match(subtractPressed));

 Platform.exit();
 }

 }

 On Fri, Sep 26, 2014 at 7:44 PM, Scott Palmer swpal...@gmail.com wrote:
 Please attach the test case I mailed earlier to the JIRA issue.

 On Fri, Sep 26, 2014 at 1:42 PM, Stephen F Northover 
 steve.x.northo...@oracle.com wrote:

 Agree.  Suggest that we move the discussion to the JIRA to capture the
 background information for whoever will address the bug.

 Steve


 On 2014-09-26, 1:41 PM, Kevin Rushforth wrote:

 It may or may not be a bug, but it will be good to investigate.

 -- Kevin


 Stephen F Northover wrote:

 Two on Windows, one on Mac.  See https://javafx-jira.kenai.com/
 browse/RT-38830

 Steve

 On 2014-09-26, 1:25 PM, Stephen F Northover wrote:

 This is on Mac.  Will try Windows.

 Steve

 On 2014-09-26, 1:24 PM, Kevin Rushforth wrote:

 Is this on a Mac or on Windows?  I just ran your test case and I get
 two runnables, which is what I would expect.

 -- Kevin


 Stephen F Northover wrote:

 I am only seeing the runnable fired once in FX 8u40.

 Steve

 Steps:

 1) Run TestKeyCombination
 2) Press Control+-

 Here is the test code:

 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.input.KeyCharacterCombination;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.stage.Stage;

 public class TestKeyCombination extends Application {
 public static void main(String[] args) {
 Application.launch(args);
 }

 @Override public void start(Stage stage) {
 stage.setTitle(Test KeyCombination);
 Scene scene = new Scene(new Group(), 600, 450);
 Button button1 = new Button();
 button1.setText(Click Me);
 stage.setScene(scene);
 stage.show();

 KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 KeyCharacterCombination(-, KeyCombination.CONTROL_DOWN);
 Runnable runnable = () - System.out.println(HI);
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
 }
 }


 On 2014-09-26, 1:01 PM, Scott Palmer wrote:

 KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
 KeyCombination.CONTROL_DOWN);
 KeyCombination cmdMinusFromCharacter = new
 Key*Character*Combination(-,
 KeyCombination.CONTROL_DOWN);

 Using the above like this:
 scene.getAccelerators().put(cmdMinus, runnable);
 scene.getAccelerators().put(cmdMinusFromCharacter, runnable);

 Will result in the runnable being fired twice from the 

Re: Accelerators - odd behavior

2014-09-26 Thread Scott Palmer
I should note that KeyCodeCombintation(KeyCode.EQUALS,
KeyCombination.CONTROL_DOWN, KeyCombination.SHIFT_DOWN)
is undesirable as it requires knowledge of the keyboard layout that
shouldn't be required.

On Fri, Sep 26, 2014 at 6:58 PM, Scott Palmer swpal...@gmail.com wrote:

 While looking into this I noticed that KeyCharacterCombination(+,
 KeyCombination.CONTROL_DOWN)  doesn't work for either the PLUS (shifted
 EQUALS), or ADD (numeric keypad +).

 Only KeyCodeCombintation(KeyCode.EQUALS, KeyCombination.CONTROL_DOWN, 
 KeyCombination.SHIFT_DOWN)
 was working.

 On Fri, Sep 26, 2014 at 3:11 PM, Tomas Mikula tomas.mik...@gmail.com
 wrote:

  That doesn't explain why this isn't happening for PLUS.

 KeyCodeCombination(KeyCode.PLUS, KeyCombination.CONTROL_DOWN)

 is never matched. It might even be impossible to get a KEY_PRESSED
 event with key code PLUS with English keyboard layout. When I switch
 keyboard layout to Slovak, which has the '+' sign accessible without
 Shift, I do get the runnable fired twice.

 Best,
 Tomas