<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
                                        > <span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Eliminate cases handled by otherwise clause in installVirtualKeyTable. </span><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Okay. Yet, this was deliberate documentation that the VM knows about those window managers. Maybe it's not worth supporting it. :-)</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Best,</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Marcel</span></div><div class="mb_sig"></div><blockquote class='history_container' type='cite' style='border-left-style:solid;border-width:1px; margin-top:20px; margin-left:0px;padding-left:10px;'>
                        <p style='color: #AAAAAA; margin-top: 10px;'>Am 09.07.2021 23:46:32 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style='font-family:Arial,Helvetica,sans-serif'>Eliot Miranda uploaded a new version of Kernel to project The Trunk:<br>http://source.squeak.org/trunk/Kernel-eem.1407.mcz<br><br>==================== Summary ====================<br><br>Name: Kernel-eem.1407<br>Author: eem<br>Time: 9 July 2021, 2:46:18.688883 pm<br>UUID: 48a520fa-d6a2-44fa-8508-3405e7e0b8b9<br>Ancestors: Kernel-mt.1406<br><br>Have scanForInstructionSequence: descend into full blocks.  Eliminate cases handled by otherwise clause in installVirtualKeyTable. Add error code to resue primitive invocation.<br><br>=============== Diff against Kernel-mt.1406 ===============<br><br>Item was changed:<br>  ----- Method: EventSensor class>>installVirtualKeyTable (in category 'class initialization') -----<br>  installVirtualKeyTable<br>  <br>          VirtualKeyTable := Smalltalk windowSystemName<br>                         caseOf: {<br>                             ['Windows'] -> [self virtualKeysOnWindows].<br>                                ['Win32' "older VMs"] -> [self virtualKeysOnWindows].<br>                            ['Aqua'] -> [self virtualKeysOnMacOS].<br>                             ['X11'] -> [self virtualKeysOnX11].<br>-                               ['RiscOS'] -> [Dictionary new].<br>-                           ['Quartz'] -> [Dictionary new].<br>                    } otherwise: [Dictionary new].<br>        <br>      "Shift 8 bits to not overwrite virtual-key mappings from above."<br>    self mapControlKeysToCommandKeys ifTrue: [              <br>              VirtualKeyTable<br>                       at: (2r0010 "ctrl" bitShift: 8)<br>                     put: (2r1010 "cmd+ctrl").<br>           VirtualKeyTable<br>                       at: (2r0011 "ctrl+shift" bitShift: 8)<br>                       put: (2r1011 "cmd+ctrl+shift")].<br>            <br>      self mapAltKeysToOptionKeys ifTrue: [<br>                 VirtualKeyTable<br>                       at: (2r1000 "cmd/alt" bitShift: 8)<br>                          put: (2r1100 "cmd/alt+opt").<br>                VirtualKeyTable<br>                       at: (2r1001 "cmd/alt+shift" bitShift: 8)<br>                    put: (2r1101 "cmd/alt+opt+shift")].!<br><br>Item was changed:<br>  ----- Method: InstructionStream>>scanForInstructionSequence: (in category 'scanning') -----<br>  scanForInstructionSequence: naryBlock<br>     "naryBlock is a block taking one or more arguments.<br>       Evaluate it for each sequence of instructions of length<br>       n in the receiver until naryBlock evaluates to true.<br>          Answer if naryBlock evaluated to true."<br>         | instructions |<br>      instructions := OrderedCollection withAll: ((1 to: naryBlock numArgs) collect:<br>                                                [:ign|<br>+                                                self atEnd ifFalse:<br>+                                                         [self nextInstruction]]).<br>+    instructions last ifNil: "not enough instructions, so no match in this method, but must check for blocks"<br>+          [instructions do:<br>+                    [:instOrNil|<br>+                           instOrNil ifNil: [^false].<br>+                           (instOrNil selector == #pushFullClosure:numCopied:<br>+                           and: [(self class on: instOrNil argument) scanForInstructionSequence: naryBlock]) ifTrue:<br>+                          [^true]]].<br>-                                            self atEnd ifTrue: [^false].<br>-                                                 self nextInstruction]).<br>      [(naryBlock valueWithArguments: instructions asArray) ifTrue:<br>                 [^true].<br>+      (instructions first selector == #pushFullClosure:numCopied:<br>+           and: [(self class on: instructions first argument) scanForInstructionSequence: naryBlock]) ifTrue:<br>+                 [^true].<br>       self atEnd] whileFalse:<br>              [instructions removeFirst; addLast: self nextInstruction].<br>    ^false!<br><br>Item was changed:<br>  ----- Method: Process>>resume (in category 'changing process state') -----<br>  resume<br>    "Primitive. Allow the process that the receiver represents to continue. Put <br>      the receiver in line to become the activeProcess.  Fail if the receiver is <br>           already waiting in a queue (in a Semaphore or ProcessScheduler).  Fail if<br>     the receiver's suspendedContext is not a context.<br>     Essential. See Object documentation whatIsAPrimitive."<br>  <br>+     <primitive: 87="" error:="" ec=""><br>-       <primitive: 87=""><br>    self primitiveFailed!<br><br><br></primitive:></primitive:></div></blockquote>
                                        </div></body>