<div dir="ltr"><div>I'm thinking without concern about responsabilitiy models here,</div><div><br></div><div>Maybe we could we make it so the keyboard event first passes the event to the selected morph, and the morph has the responsibility to return a boolean or some other indication of whether the morph overrides the global keybindings for that event or not and then depending on the response the keyboardEvent handler either stops the chain or continues.</div><div><br></div><div>So it would be something like:<br><br></div><div>KeyboardEvent -> SelectedMorph -> KeyboardEvent -> (ifNotOverriden) -> global shortcut check</div><div>                                                                            -> (ifOverriden) -> end execution chain.<br></div><div><br></div><div>So you'd have a method in the Morph class (instance side) that always returns the signal to not override but can be implemented in the Morph that needs to override to return the corresponding signal.</div><div><br></div><div>I think this could be done without refactoring half the system.</div><div><br></div><div><b>Mauro Rizzi</b><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El dom, 20 dic 2020 a las 11:24, Juan Vuletich (<<a href="mailto:juan@jvuletich.org">juan@jvuletich.org</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
  
  <div bgcolor="#ffffff">
    I agree that we need to improve on this area. I don't have any
    specific plans on how do do this. But this discussion is
    interesting.<br>
    <br>
    The current code evolved from Squeak's without ever thinking too
    much about it.<br>
    <br>
    We need to think a good sequence for dispatching events. Right now,
    the most inner morph behind the hand (and on top of others) has the
    choice to process events before owner. See MorphicEvent >>
    dispatchWith:localPosition: . So, global keystrokes are handled
    before this. If the World or the Hand processed events before other
    morphs, all this could be easier to understand, extend, etc.<br>
    <br>
    The Hand could be a good "semi global" place to dispatch events to
    the appropriate Morph. But if we do it by traversing the morph tree,
    the natural place to start is the World.<br>
    <br>
    Let's keep thinking and discussing!<br>
    <br>
    Thanks,<br>
    <br>
    On 12/20/2020 2:02 AM, Luciano Notarfrancesco via Cuis-dev wrote:
    <blockquote type="cite">
      <div>
        <div dir="auto" style="border-color:rgb(0,0,0);color:rgb(0,0,0)">I agree. I don’t want to change the way events work in
          Morphic and I don’t want to add extra complexity, what I’m
          proposing is to put the logic to handle a couple of global
          shortcuts in HandMorph or a subclass instead of hardcode them
          in the event classes. I wouldn’t even add preferences or
          anything like that that would add more indirection.</div>
        <br style="color:rgb(0,0,0)">
      </div>
      <div><br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Sat, 19 Dec 2020 at 10:36
            PM, <<a href="mailto:ken.dickey@whidbey.com" target="_blank">ken.dickey@whidbey.com</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2020-12-19 05:48, Mauro Rizzi via
            Cuis-dev wrote:<br>
            <br>
            > Maybe we could have an object somewhere that contains a
            collection of <br>
            > possible keyboard event triggers and the action they
            should perform?<br>
            <br>
            What happens now is that one uses mouseEnter and so forth
            with the hand <br>
            position to determine keyboard focus.<br>
            <br>
            I want context sensitive keys.  E.g. Smalltalk edit bindings
            vs <br>
            game-move bindings depending on what object has the keyboard
            focus.  I <br>
            think of this as typical and expected.  Control is
            distributed. Objects <br>
            decide.<br>
            <br>
            To "steal" keys from the current keyboard focus object for
            overriding <br>
            keybindings would seem to require [1] a filter in the
            KeyboardEvent <br>
            class and [2] a protocol which can be overridden (like <br>
            #allowsKeyboardOverrides) so that an object which really
            wants keys <br>
            (think gaming) can get all of them and then if it does not
            want one <br>
            re-delegates it back to the "global" bindings.<br>
            <br>
            Is the above better than what exists now?  Does it carry its
            own weight? <br>
              [This is easy to implement, but adds code and is more
            complex, and adds <br>
            a new protocol which everyone needs to be aware of.  There
            needs to be a <br>
            strong motivator for change.]<br>
            <br>
            Other options?<br>
            <br>
            $0.02<br>
            -KenD<br>
            <br>
          </blockquote>
        </div>
      </div>
    </blockquote>
    <br>
    <br>
    <pre cols="72">-- 
Juan Vuletich
<a href="http://www.cuis-smalltalk.org" target="_blank">www.cuis-smalltalk.org</a>
<a href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev" target="_blank">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a href="https://github.com/jvuletich" target="_blank">https://github.com/jvuletich</a>
<a href="https://www.linkedin.com/in/juan-vuletich-75611b3" target="_blank">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
@JuanVuletich</pre>
  </div>

</blockquote></div>