[ 
https://issues.apache.org/jira/browse/PIVOT-720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13068570#comment-13068570
 ] 

Chris Bartlett commented on PIVOT-720:
--------------------------------------

Given Bill's example, I had been thinking of something along the lines of ...

A new method, Display#getActiveDisplay(), would return the Display considered 
to be active in the eyes of the current OS/application.
The internals of it are very much up for discussion, but I was thinking that 
Window#isActive() would probably be used by default, but this could be 
overridden if required.  
http://download.oracle.com/javase/6/docs/api/java/awt/Window.html#isActive()

In the case of an applet or a desktop application with only one Display, I 
imagine that this would return the only Display.
In the case of a desktop application with multiple Displays, it would return 
null unless exactly 1 Display was considered active.
(Alternatively a desktop application with multiple Displays might return the 
first Display if 0 or >1 were considered active.)


// Pseudo-code for dispatch of keyboard events

// Get the AWT event & prepare as a 'Pivot keyboard event'
keyStrokeEvent = ...

// The active Display is the initial target
Display activeDisplay = Display.getActiveDisplay();
Component destinationComponent = activeDisplay;

// Try to find a more specific target within the active Display
// Would this ever be null?
if (activeDisplay != null) {
    // Use the active Pivot Window?
    Window activeWindow = Window.getActiveWindow();
    if (activeWindow != null && activeWindow.getDisplay() == activeDisplay) {
        destinationComponent = activeWindow;
    }
    // Use the focused Pivot Component?
    Component focusedComponent = Component.getFocusedComponent();
    if (focusedComponent != null && focusedComponent.getDisplay() == 
activeDisplay) {
        destinationComponent = focusedComponent;
    }
}

// Dispatch the keyStrokeEvent for processing
boolean consumed = false;
if (destinationComponent != null) {
    consumed = dispatchKeyStrokeEvent(keyStrokeEvent, destinationComponent);
}

// Note that this differs from the current implementation, and is more of a wish
// than a requirement (and it should probably live in it's own JIRA ticket)
// The UnprocessedKeyHandler would become a 'UnconsumedKeyStrokeHandler' rather
// than a 'ApplicationHasNoFocusedComponentsKeyStrokeHandler'
if (!consumed && unprocessedKeyHandler != null) {
    dispatchKeyStrokeEvent(keyStrokeEvent, unprocessedKeyHandler);
}


A couple of notes 
- The above pseudo-code is just intended to demonstrates the logic of a 
dispatch algorithm designed to offer some flexibility over blindly sending 
events to the focused Component.
- The decision to restrict keystrokes to the active Display/native Window, 
might potentially be set via a Pivot start-up property.


> Want keystrokes to go to the native OS window that has focus
> ------------------------------------------------------------
>
>                 Key: PIVOT-720
>                 URL: https://issues.apache.org/jira/browse/PIVOT-720
>             Project: Pivot
>          Issue Type: Improvement
>          Components: wtk
>    Affects Versions: 2.0
>            Reporter: Bill van Melle
>             Fix For: 2.1
>
>
> If you use DesktopApplicationContext.createDisplay to create a new OS window, 
> and you want to handle keystrokes sent to that window, the only way your key 
> listener will get called is if there is a focused Pivot component in that 
> window.  But not all interesting windows contain a focusable component, and 
> even when they do, there are often good reasons not to focus a particular 
> component by default.  Meanwhile, if Pivot's notion of the currently focused 
> component is in a different OS window, keystrokes will go there, even though 
> it's not the window that appears to the user to have focus (as judged by the 
> native window system focus decoration), which is counterintuitive.
> There is extensive discussion at 
> http://apache-pivot-users.399431.n3.nabble.com/KeyListeners-on-ImageView-td2600622.html

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to