mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 09:03:21 +00:00 
			
		
		
		
	GUAC-1170: Load keyboard layout within guacOsk directive. Update translation to point to new JSON layout. Remove old XML layouts.
This commit is contained in:
		| @@ -40,8 +40,13 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { | ||||
|         }, | ||||
|  | ||||
|         templateUrl: 'app/osk/templates/guacOsk.html', | ||||
|         controller: ['$scope', '$rootScope', '$window', '$element', | ||||
|             function guacOsk($scope, $rootScope, $window, $element) { | ||||
|         controller: ['$scope', '$injector', '$element', | ||||
|             function guacOsk($scope, $injector, $element) { | ||||
|  | ||||
|             // Required services | ||||
|             var $http        = $injector.get('$http'); | ||||
|             var $rootScope   = $injector.get('$rootScope'); | ||||
|             var cacheService = $injector.get('cacheService'); | ||||
|  | ||||
|             /** | ||||
|              * The current on-screen keyboard, if any. | ||||
| @@ -67,7 +72,7 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { | ||||
|             }; | ||||
|  | ||||
|             // Set layout whenever URL changes | ||||
|             $scope.$watch("layout", function setLayout(layout) { | ||||
|             $scope.$watch("layout", function setLayout(url) { | ||||
|  | ||||
|                 // Remove current keyboard | ||||
|                 if (keyboard) { | ||||
| @@ -76,24 +81,40 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { | ||||
|                 } | ||||
|  | ||||
|                 // Load new keyboard | ||||
|                 if (layout) { | ||||
|                 if (url) { | ||||
|  | ||||
|                     // Add OSK element | ||||
|                     keyboard = new Guacamole.OnScreenKeyboard(layout); | ||||
|                     main.appendChild(keyboard.getElement()); | ||||
|                     // Retrieve layout JSON | ||||
|                     $http({ | ||||
|                         cache   : cacheService.languages, | ||||
|                         method  : 'GET', | ||||
|                         url     : url | ||||
|                     }) | ||||
|  | ||||
|                     // Init size | ||||
|                     keyboard.resize(main.offsetWidth); | ||||
|                     // Build OSK with retrieved layout | ||||
|                     .success(function layoutRetrieved(layout) { | ||||
|  | ||||
|                     // Broadcast keydown for each key pressed | ||||
|                     keyboard.onkeydown = function(keysym) { | ||||
|                         $rootScope.$broadcast('guacSyntheticKeydown', keysym); | ||||
|                     }; | ||||
|                      | ||||
|                     // Broadcast keydown for each key released  | ||||
|                     keyboard.onkeyup = function(keysym) { | ||||
|                         $rootScope.$broadcast('guacSyntheticKeyup', keysym); | ||||
|                     }; | ||||
|                         // Abort if the layout changed while we were waiting for a response | ||||
|                         if ($scope.layout !== url) | ||||
|                             return; | ||||
|  | ||||
|                         // Add OSK element | ||||
|                         keyboard = new Guacamole.OnScreenKeyboard(layout); | ||||
|                         main.appendChild(keyboard.getElement()); | ||||
|  | ||||
|                         // Init size | ||||
|                         keyboard.resize(main.offsetWidth); | ||||
|  | ||||
|                         // Broadcast keydown for each key pressed | ||||
|                         keyboard.onkeydown = function(keysym) { | ||||
|                             $rootScope.$broadcast('guacSyntheticKeydown', keysym); | ||||
|                         }; | ||||
|                          | ||||
|                         // Broadcast keydown for each key released  | ||||
|                         keyboard.onkeyup = function(keysym) { | ||||
|                             $rootScope.$broadcast('guacSyntheticKeyup', keysym); | ||||
|                         }; | ||||
|  | ||||
|                     }); | ||||
|  | ||||
|                 } | ||||
|  | ||||
|   | ||||
| @@ -1,316 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
|  | ||||
| <!DOCTYPE keyboard PUBLIC | ||||
|     "-//Guacamole/Guacamole Onscreen Keyboard DTD 0.6.0//EN" | ||||
|     "http://guac-dev.org/pub/dtd/guacamole-osk-0.6.0.dtd"> | ||||
|  | ||||
| <!-- | ||||
|    Copyright (C) 2013 Glyptodon LLC | ||||
|  | ||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|    of this software and associated documentation files (the "Software"), to deal | ||||
|    in the Software without restriction, including without limitation the rights | ||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|    copies of the Software, and to permit persons to whom the Software is | ||||
|    furnished to do so, subject to the following conditions: | ||||
|  | ||||
|    The above copyright notice and this permission notice shall be included in | ||||
|    all copies or substantial portions of the Software. | ||||
|  | ||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|    THE SOFTWARE. | ||||
| --> | ||||
|  | ||||
| <keyboard lang="en_US" layout="qwerty" size="16.3"> | ||||
|     <row> | ||||
|         <key size="1.5"> | ||||
|             <cap keysym="0xFF09">Tab</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>q</cap> | ||||
|             <cap if="numsym">1</cap> | ||||
|             <cap if="shift">Q</cap> | ||||
|             <cap if="numsym,shift">q</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>w</cap> | ||||
|             <cap if="numsym">2</cap> | ||||
|             <cap if="shift">W</cap> | ||||
|             <cap if="numsym,shift">w</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>e</cap> | ||||
|             <cap if="numsym">3</cap> | ||||
|             <cap if="shift">E</cap> | ||||
|             <cap if="numsym,shift">e</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>r</cap> | ||||
|             <cap if="numsym">4</cap> | ||||
|             <cap if="shift">R</cap> | ||||
|             <cap if="numsym,shift">r</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>t</cap> | ||||
|             <cap if="numsym">5</cap> | ||||
|             <cap if="shift">T</cap> | ||||
|             <cap if="numsym,shift">t</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>y</cap> | ||||
|             <cap if="numsym">6</cap> | ||||
|             <cap if="shift">Y</cap> | ||||
|             <cap if="numsym,shift">y</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>u</cap> | ||||
|             <cap if="numsym">7</cap> | ||||
|             <cap if="shift">U</cap> | ||||
|             <cap if="numsym,shift">u</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>i</cap> | ||||
|             <cap if="numsym">8</cap> | ||||
|             <cap if="shift">I</cap> | ||||
|             <cap if="numsym,shift">i</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>o</cap> | ||||
|             <cap if="numsym">9</cap> | ||||
|             <cap if="shift">O</cap> | ||||
|             <cap if="numsym,shift">o</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>p</cap> | ||||
|             <cap if="numsym">0</cap> | ||||
|             <cap if="shift">P</cap> | ||||
|             <cap if="numsym,shift">p</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>[</cap> | ||||
|             <cap if="shift">{</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>]</cap> | ||||
|             <cap if="shift">}</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="1.5"> | ||||
|             <cap keysym="0xFF08">Back</cap> | ||||
|         </key> | ||||
|     </row> | ||||
|  | ||||
|     <row><gap size="0.1"/></row> | ||||
|  | ||||
|     <row> | ||||
|         <key size="1.85" class="numsym"> | ||||
|             <cap modifier="numsym" sticky="true">?123</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>a</cap> | ||||
|             <cap if="numsym">#</cap> | ||||
|             <cap if="shift">A</cap> | ||||
|             <cap if="numsym,shift">a</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>s</cap> | ||||
|             <cap if="numsym">$</cap> | ||||
|             <cap if="shift">S</cap> | ||||
|             <cap if="numsym,shift">s</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>d</cap> | ||||
|             <cap if="numsym">%</cap> | ||||
|             <cap if="shift">D</cap> | ||||
|             <cap if="numsym,shift">d</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>f</cap> | ||||
|             <cap if="numsym">&</cap> | ||||
|             <cap if="shift">F</cap> | ||||
|             <cap if="numsym,shift">f</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>g</cap> | ||||
|             <cap if="numsym">*</cap> | ||||
|             <cap if="shift">G</cap> | ||||
|             <cap if="numsym,shift">g</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>h</cap> | ||||
|             <cap if="numsym">-</cap> | ||||
|             <cap if="shift">H</cap> | ||||
|             <cap if="numsym,shift">h</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>j</cap> | ||||
|             <cap if="numsym">+</cap> | ||||
|             <cap if="shift">J</cap> | ||||
|             <cap if="numsym,shift">j</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>k</cap> | ||||
|             <cap if="numsym">(</cap> | ||||
|             <cap if="shift">K</cap> | ||||
|             <cap if="numsym,shift">k</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>l</cap> | ||||
|             <cap if="numsym">)</cap> | ||||
|             <cap if="shift">L</cap> | ||||
|             <cap if="numsym,shift">l</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>;</cap> | ||||
|             <cap if="shift">:</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>'</cap> | ||||
|             <cap if="shift">"</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="2.25"> | ||||
|             <cap keysym="0xFF0D">Enter</cap> | ||||
|         </key> | ||||
|     </row> | ||||
|  | ||||
|     <row><gap size="0.1"/></row> | ||||
|  | ||||
|     <row> | ||||
|         <key size="2.1" class="shift"> | ||||
|             <cap modifier="shift" keysym="0xFFE1">Shift</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>z</cap> | ||||
|             <cap if="numsym"><</cap> | ||||
|             <cap if="shift">Z</cap> | ||||
|             <cap if="numsym,shift">z</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>x</cap> | ||||
|             <cap if="numsym">></cap> | ||||
|             <cap if="shift">X</cap> | ||||
|             <cap if="numsym,shift">x</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>c</cap> | ||||
|             <cap if="numsym">=</cap> | ||||
|             <cap if="shift">C</cap> | ||||
|             <cap if="numsym,shift">c</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>v</cap> | ||||
|             <cap if="numsym">'</cap> | ||||
|             <cap if="shift">V</cap> | ||||
|             <cap if="numsym,shift">v</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>b</cap> | ||||
|             <cap if="numsym">;</cap> | ||||
|             <cap if="shift">B</cap> | ||||
|             <cap if="numsym,shift">b</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>n</cap> | ||||
|             <cap if="numsym">,</cap> | ||||
|             <cap if="shift">N</cap> | ||||
|             <cap if="numsym,shift">n</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>m</cap> | ||||
|             <cap if="numsym">.</cap> | ||||
|             <cap if="shift">M</cap> | ||||
|             <cap if="numsym,shift">m</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>,</cap> | ||||
|             <cap if="numsym">!</cap> | ||||
|             <cap if="shift">!</cap> | ||||
|             <cap if="numsym,shift">!</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>.</cap> | ||||
|             <cap if="numsym">?</cap> | ||||
|             <cap if="shift">?</cap> | ||||
|             <cap if="numsym,shift">?</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap>/</cap> | ||||
|             <cap if="shift">?</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="3.1" class="shift"> | ||||
|             <cap modifier="shift" keysym="0xFFE2">Shift</cap> | ||||
|         </key> | ||||
|     </row> | ||||
|  | ||||
|     <row><gap size="0.1"/></row> | ||||
|  | ||||
|     <row> | ||||
|         <key size="1.6" class="control"> | ||||
|             <cap modifier="control" keysym="0xFFE3">Ctrl</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="1.6" class="super"> | ||||
|             <cap modifier="super" keysym="0xFFEB">Super</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="1.6" class="alt"> | ||||
|             <cap modifier="alt" keysym="0xFFE9">Alt</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="6.1"> | ||||
|             <cap> </cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="1.6" class="alt"> | ||||
|             <cap modifier="alt" keysym="0xFFEA">Alt</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="1.6"> | ||||
|             <cap keysym="0xFF67">Menu</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key size="1.6" class="control"> | ||||
|             <cap modifier="control" keysym="0xFFE4">Ctrl</cap> | ||||
|         </key> | ||||
|     </row> | ||||
| </keyboard> | ||||
| @@ -1,500 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
|  | ||||
| <!DOCTYPE keyboard PUBLIC | ||||
|     "-//Guacamole/Guacamole Onscreen Keyboard DTD 0.6.0//EN" | ||||
|     "http://guac-dev.org/pub/dtd/guacamole-osk-0.6.0.dtd"> | ||||
|  | ||||
| <!-- | ||||
|    Copyright (C) 2013 Glyptodon LLC | ||||
|  | ||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|    of this software and associated documentation files (the "Software"), to deal | ||||
|    in the Software without restriction, including without limitation the rights | ||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|    copies of the Software, and to permit persons to whom the Software is | ||||
|    furnished to do so, subject to the following conditions: | ||||
|  | ||||
|    The above copyright notice and this permission notice shall be included in | ||||
|    all copies or substantial portions of the Software. | ||||
|  | ||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|    THE SOFTWARE. | ||||
| --> | ||||
|  | ||||
| <keyboard lang="en_US" layout="qwerty" size="22"> | ||||
|     <row> | ||||
|         <key> | ||||
|             <cap keysym="0xFF1B">Esc</cap> | ||||
|         </key> | ||||
|         <gap size="0.8"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFBE">F1</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFBF">F2</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC0">F3</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC1">F4</cap> | ||||
|         </key> | ||||
|         <gap size="0.8"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC2">F5</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC3">F6</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC4">F7</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC5">F8</cap> | ||||
|         </key> | ||||
|         <gap size="0.8"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC6">F9</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC7">F10</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC8">F11</cap> | ||||
|         </key> | ||||
|         <gap size="0.1"/> | ||||
|         <key> | ||||
|             <cap keysym="0xFFC9">F12</cap> | ||||
|         </key> | ||||
|     </row> | ||||
|     <row> | ||||
|         <gap size="0.25"/> | ||||
|     </row> | ||||
|     <column> | ||||
|         <row> | ||||
|             <key> | ||||
|                 <cap>`</cap> | ||||
|                 <cap if="shift">~</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>1</cap> | ||||
|                 <cap if="shift">!</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>2</cap> | ||||
|                 <cap if="shift">@</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>3</cap> | ||||
|                 <cap if="shift">#</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>4</cap> | ||||
|                 <cap if="shift">$</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>5</cap> | ||||
|                 <cap if="shift">%</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>6</cap> | ||||
|                 <cap if="shift">^</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>7</cap> | ||||
|                 <cap if="shift">&</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>8</cap> | ||||
|                 <cap if="shift">*</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>9</cap> | ||||
|                 <cap if="shift">(</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>0</cap> | ||||
|                 <cap if="shift">)</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>-</cap> | ||||
|                 <cap if="shift">_</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>=</cap> | ||||
|                 <cap if="shift">+</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="2"> | ||||
|                 <cap keysym="0xFF08">Back</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|  | ||||
|         <row><gap size="0.1"/></row> | ||||
|  | ||||
|         <row> | ||||
|             <key size="1.5"> | ||||
|                 <cap keysym="0xFF09">Tab</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>q</cap> | ||||
|                 <cap if="caps">Q</cap> | ||||
|                 <cap if="shift">Q</cap> | ||||
|                 <cap if="caps,shift">q</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>w</cap> | ||||
|                 <cap if="caps">W</cap> | ||||
|                 <cap if="shift">W</cap> | ||||
|                 <cap if="caps,shift">w</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>e</cap> | ||||
|                 <cap if="caps">E</cap> | ||||
|                 <cap if="shift">E</cap> | ||||
|                 <cap if="caps,shift">e</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>r</cap> | ||||
|                 <cap if="caps">R</cap> | ||||
|                 <cap if="shift">R</cap> | ||||
|                 <cap if="caps,shift">r</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>t</cap> | ||||
|                 <cap if="caps">T</cap> | ||||
|                 <cap if="shift">T</cap> | ||||
|                 <cap if="caps,shift">t</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>y</cap> | ||||
|                 <cap if="caps">Y</cap> | ||||
|                 <cap if="shift">Y</cap> | ||||
|                 <cap if="caps,shift">y</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>u</cap> | ||||
|                 <cap if="caps">U</cap> | ||||
|                 <cap if="shift">U</cap> | ||||
|                 <cap if="caps,shift">u</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>i</cap> | ||||
|                 <cap if="caps">I</cap> | ||||
|                 <cap if="shift">I</cap> | ||||
|                 <cap if="caps,shift">i</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>o</cap> | ||||
|                 <cap if="caps">O</cap> | ||||
|                 <cap if="shift">O</cap> | ||||
|                 <cap if="caps,shift">o</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>p</cap> | ||||
|                 <cap if="caps">P</cap> | ||||
|                 <cap if="shift">P</cap> | ||||
|                 <cap if="caps,shift">p</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>[</cap> | ||||
|                 <cap if="shift">{</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>]</cap> | ||||
|                 <cap if="shift">}</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.5"> | ||||
|                 <cap>\</cap> | ||||
|                 <cap if="shift">|</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|  | ||||
|         <row><gap size="0.1"/></row> | ||||
|  | ||||
|         <row> | ||||
|             <key size="1.85"> | ||||
|                 <cap modifier="caps" keysym="0xFFE5" sticky="true">Caps</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>a</cap> | ||||
|                 <cap if="caps">A</cap> | ||||
|                 <cap if="shift">A</cap> | ||||
|                 <cap if="caps,shift">a</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>s</cap> | ||||
|                 <cap if="caps">S</cap> | ||||
|                 <cap if="shift">S</cap> | ||||
|                 <cap if="caps,shift">s</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>d</cap> | ||||
|                 <cap if="caps">D</cap> | ||||
|                 <cap if="shift">D</cap> | ||||
|                 <cap if="caps,shift">d</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>f</cap> | ||||
|                 <cap if="caps">F</cap> | ||||
|                 <cap if="shift">F</cap> | ||||
|                 <cap if="caps,shift">f</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>g</cap> | ||||
|                 <cap if="caps">G</cap> | ||||
|                 <cap if="shift">G</cap> | ||||
|                 <cap if="caps,shift">g</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>h</cap> | ||||
|                 <cap if="caps">H</cap> | ||||
|                 <cap if="shift">H</cap> | ||||
|                 <cap if="caps,shift">h</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>j</cap> | ||||
|                 <cap if="caps">J</cap> | ||||
|                 <cap if="shift">J</cap> | ||||
|                 <cap if="caps,shift">j</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>k</cap> | ||||
|                 <cap if="caps">K</cap> | ||||
|                 <cap if="shift">K</cap> | ||||
|                 <cap if="caps,shift">k</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>l</cap> | ||||
|                 <cap if="caps">L</cap> | ||||
|                 <cap if="shift">L</cap> | ||||
|                 <cap if="caps,shift">l</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>;</cap> | ||||
|                 <cap if="shift">:</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>'</cap> | ||||
|                 <cap if="shift">"</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="2.25"> | ||||
|                 <cap keysym="0xFF0D">Enter</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|  | ||||
|         <row><gap size="0.1"/></row> | ||||
|  | ||||
|         <row> | ||||
|             <key size="2.1" class="shift"> | ||||
|                 <cap modifier="shift" keysym="0xFFE1">Shift</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>z</cap> | ||||
|                 <cap if="caps">Z</cap> | ||||
|                 <cap if="shift">Z</cap> | ||||
|                 <cap if="caps,shift">z</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>x</cap> | ||||
|                 <cap if="caps">X</cap> | ||||
|                 <cap if="shift">X</cap> | ||||
|                 <cap if="caps,shift">x</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>c</cap> | ||||
|                 <cap if="caps">C</cap> | ||||
|                 <cap if="shift">C</cap> | ||||
|                 <cap if="caps,shift">c</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>v</cap> | ||||
|                 <cap if="caps">V</cap> | ||||
|                 <cap if="shift">V</cap> | ||||
|                 <cap if="caps,shift">v</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>b</cap> | ||||
|                 <cap if="caps">B</cap> | ||||
|                 <cap if="shift">B</cap> | ||||
|                 <cap if="caps,shift">b</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>n</cap> | ||||
|                 <cap if="caps">N</cap> | ||||
|                 <cap if="shift">N</cap> | ||||
|                 <cap if="caps,shift">n</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>m</cap> | ||||
|                 <cap if="caps">M</cap> | ||||
|                 <cap if="shift">M</cap> | ||||
|                 <cap if="caps,shift">m</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>,</cap> | ||||
|                 <cap if="shift"><</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>.</cap> | ||||
|                 <cap if="shift">></cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap>/</cap> | ||||
|                 <cap if="shift">?</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="3.1" class="shift"> | ||||
|                 <cap modifier="shift" keysym="0xFFE2">Shift</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|  | ||||
|         <row><gap size="0.1"/></row> | ||||
|  | ||||
|         <row> | ||||
|             <key size="1.6" class="control"> | ||||
|                 <cap modifier="control" keysym="0xFFE3">Ctrl</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.6" class="super"> | ||||
|                 <cap modifier="super" keysym="0xFFEB">Super</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.6" class="alt"> | ||||
|                 <cap modifier="alt" keysym="0xFFE9">Alt</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="6.1"> | ||||
|                 <cap> </cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.6" class="alt"> | ||||
|                 <cap modifier="alt" keysym="0xFFE3">Alt</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.6" class="super"> | ||||
|                 <cap modifier="super" keysym="0xFF67">Menu</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.6" class="control"> | ||||
|                 <cap modifier="control" keysym="0xFFE4">Ctrl</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|     </column> | ||||
|         <column> | ||||
|         <row> | ||||
|             <gap size="0.25"/> | ||||
|         </row> | ||||
|     </column> | ||||
|     <column align="center"> | ||||
|         <row> | ||||
|             <key size="1.75"> | ||||
|                 <cap keysym="0xFF63">Ins</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.75"> | ||||
|                 <cap keysym="0xFF50">Home</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.75"> | ||||
|                 <cap keysym="0xFF55">PgUp</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|         <row><gap size="0.1"/></row> | ||||
|         <row> | ||||
|             <key size="1.75"> | ||||
|                 <cap keysym="0xFFFF">Del</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.75"> | ||||
|                 <cap keysym="0xFF57">End</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key size="1.75"> | ||||
|                 <cap keysym="0xFF56">PgDn</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|         <row> | ||||
|             <gap/> | ||||
|         </row> | ||||
|         <row> | ||||
|             <key> | ||||
|                 <cap keysym="0xFF52">↑</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|         <row><gap size="0.1"/></row> | ||||
|         <row> | ||||
|             <key> | ||||
|                 <cap keysym="0xFF51">←</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap keysym="0xFF54">↓</cap> | ||||
|             </key> | ||||
|             <gap size="0.1"/> | ||||
|             <key> | ||||
|                 <cap keysym="0xFF53">→</cap> | ||||
|             </key> | ||||
|         </row> | ||||
|     </column> | ||||
| </keyboard> | ||||
| @@ -117,7 +117,7 @@ | ||||
|         "TEXT_RECONNECT_COUNTDOWN"        : "Reconnecting in {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", | ||||
|         "TEXT_FILE_TRANSFER_PROGRESS"     : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", | ||||
|  | ||||
|         "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.xml" | ||||
|         "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" | ||||
|  | ||||
|     }, | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user