<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Pushed to GitHub.<br>
    <br>
    Thanks,<br>
    <br>
    On 6/17/2022 4:37 PM, Luciano Notarfrancesco via Cuis-dev wrote:
    <blockquote
cite="mid:CAL5GDyq+6+qaafVz8rCs_5ZWt5Pbzp=cTP3KMJDOF+8kHoApFA@mail.gmail.com"
      type="cite">
      <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 moz-do-not-send="true"
              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: 1px solid rgb(204, 204, 204);
            padding-left: 1ex;">
            <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 moz-do-not-send="true"
                      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 style="font-family: monospace;" cols="72">-- 
Juan Vuletich
<a moz-do-not-send="true" href="http://www.cuis-smalltalk.org" target="_blank" style="font-family: monospace;">www.cuis-smalltalk.org</a>
<a moz-do-not-send="true" 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 moz-do-not-send="true" href="https://github.com/jvuletich" target="_blank" style="font-family: monospace;">https://github.com/jvuletich</a>
<a moz-do-not-send="true" 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 moz-do-not-send="true" href="https://independent.academia.edu/JuanVuletich" target="_blank" style="font-family: monospace;">https://independent.academia.edu/JuanVuletich</a>
<a moz-do-not-send="true" href="https://www.researchgate.net/profile/Juan-Vuletich" target="_blank" style="font-family: monospace;">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a moz-do-not-send="true" 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 moz-do-not-send="true" href="https://twitter.com/JuanVuletich" target="_blank" style="font-family: monospace;">https://twitter.com/JuanVuletich</a></pre>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a>
<a class="moz-txt-link-freetext" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a class="moz-txt-link-freetext" href="https://github.com/jvuletich">https://github.com/jvuletich</a>
<a class="moz-txt-link-freetext" href="https://www.linkedin.com/in/juan-vuletich-75611b3">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
<a class="moz-txt-link-freetext" href="https://independent.academia.edu/JuanVuletich">https://independent.academia.edu/JuanVuletich</a>
<a class="moz-txt-link-freetext" href="https://www.researchgate.net/profile/Juan-Vuletich">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a class="moz-txt-link-freetext" href="https://patents.justia.com/inventor/juan-manuel-vuletich">https://patents.justia.com/inventor/juan-manuel-vuletich</a>
<a class="moz-txt-link-freetext" href="https://twitter.com/JuanVuletich">https://twitter.com/JuanVuletich</a></pre>
  </body>
</html>