<div dir="auto">Cool, I think it’s best to use only left/right and shift-left/right and remove tab.</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 17 Jun 2022 at 9:54 PM Juan Vuletich <<a href="mailto:JuanVuletich@zoho.com">JuanVuletich@zoho.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><u></u>

  
    
    
  
  <div bgcolor="#ffffff" text="#000000">
    Hi Luciano,<br>
    <br>
    I really like this. The attach includes two further tweaks. One is
    to enable shift-arrows to change focus. I find this nicer especially
    for HierarchicalList. I also made lists to auto select the first
    item if none selected.<br>
    <br>
    Folks, if you all agree, we'd integrate these.<br>
    <br>
    Thanks,</div><div bgcolor="#ffffff" text="#000000"><br>
    <br>
    On 6/17/2022 9:07 AM, Luciano Notarfrancesco via Cuis-dev wrote:
    <blockquote type="cite">
      
      <div>Here's an updated version. I added back the feature to scroll
        siblings, because it turns out the Package List tool still needs
        it. But this time I used a property instead of an instance
        variable, and I set it up by calling >>#scrollSiblings:
        with a collection of siblings to scroll  with the receiver
        instead of relying on the original leftSibling and rightSibling
        instance variables. The biggest changes in this change set are:
        <div>- rework of sibling navigation using a more general
          approach instead of leftSibling and rightSibling (navigate all
          morphs that handle keyboard focus in the same system window
          using left/right arrows and TAB/SHIFT-TAB, works for
          PluggableListMorph and HierarchicalListMorph and be be easily
          extended to other morphs);</div>
        <div>- change in Change Sorter and Package List to show the
          dirty flag as an asterisk in the change set or package name
          instead of using an extra list.</div>
        <div><br>
        </div>
        <div>Let me know what you think. Thanks,</div>
        <div>Luciano</div>
      </div>
      <br>
      <div>
        <div>On Fri, Jun 17, 2022 at 8:07 AM Luciano Notarfrancesco <<a href="mailto:luchiano@gmail.com" target="_blank">luchiano@gmail.com</a>>
          wrote:<br>
        </div>
        <blockquote>
          <div>Hi,
            <div>After we changed the browser to show system categories
              as a tree (or forest actually) we partially lost the
              feature to navigate between the lists with the arrow keys.
              This is because HierarchicalListMorph uses the left-right
              arrow keys to navigate the tree.</div>
            <div>I've been experimenting with ideas to add back this
              feature, and this is what I have so far. It's just an
              experiment, I'd like to know what other people think about
              this change.</div>
            <div><br>
            </div>
            <div>Basically, I got rid of the "left/right siblings
              concept" and instead I use the right-left arrows (or TAB
              and SHIFT-TAB) to navigate between all morphs in
              the active window that handle keyboard focus. This
              simplifies the code in PluggableListMorph and the methods
              that use it, since they don't need to explicitly set
              siblings. The behavior is slightly different from the
              original implementation, I'm not sure if it would bother
              anyone that is already used to the original behavior, let
              me know what you think. With this change set, the keyboard
              navigation in the browser works again, with the caveat
              that you have to use TAB and SHIFT-TAB instead of
              left-right (or we should change the handler of left-right
              in HierarchicalListMorph to use some other keys).</div>
            <div><br>
            </div>
            <div>While testing this I found a little bug: for some
              reason, SHIFT-TAB is sent twice unless SHIFT is unpressed
              before unpressing TAB. I have to investigate this further,
              but I think it is a bug in the event dispatching
              mechanism, not a bug in my code.</div>
            <div><br>
            </div>
            <div>Also, I got rid of the feature to scroll two lists
              together. I think this would be better implemented with
              some sort of PluggableMultiColumnListMorph or something
              like that. The only tools that used this functionality are
              the Change Sorter and the Package List. They used it to
              show a "dirty flag" (i.e., whether a change set or package
              has unsaved changes). Instead of showing this dirty flag
              in a list, I show it with an asterisk at the begining of
              the change set or package name. I like it because IMO it
              looks better than the original implementation, wastes less
              real estate, it is a well known UI pattern, and the code
              is simpler.</div>
            <div><br>
            </div>
            <div>Let me know what you think, whether I should continue
              in this direction and test this code better in order to
              integrate it, or if you think this change is a bad idea.</div>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
    <br>
    </div><div bgcolor="#ffffff" text="#000000"><pre cols="72" style="font-family:monospace">-- 
Juan Vuletich
<a href="http://www.cuis-smalltalk.org" target="_blank" style="font-family:monospace">www.cuis-smalltalk.org</a>
<a href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev" target="_blank" style="font-family:monospace">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a href="https://github.com/jvuletich" target="_blank" style="font-family:monospace">https://github.com/jvuletich</a>
<a href="https://www.linkedin.com/in/juan-vuletich-75611b3" target="_blank" style="font-family:monospace">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
<a href="https://independent.academia.edu/JuanVuletich" target="_blank" style="font-family:monospace">https://independent.academia.edu/JuanVuletich</a>
<a href="https://www.researchgate.net/profile/Juan-Vuletich" target="_blank" style="font-family:monospace">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a href="https://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank" style="font-family:monospace">https://patents.justia.com/inventor/juan-manuel-vuletich</a>
<a href="https://twitter.com/JuanVuletich" target="_blank" style="font-family:monospace">https://twitter.com/JuanVuletich</a></pre>
  </div>

</blockquote></div></div>