mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-30 00:23: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', |         templateUrl: 'app/osk/templates/guacOsk.html', | ||||||
|         controller: ['$scope', '$rootScope', '$window', '$element', |         controller: ['$scope', '$injector', '$element', | ||||||
|             function guacOsk($scope, $rootScope, $window, $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. |              * The current on-screen keyboard, if any. | ||||||
| @@ -67,7 +72,7 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { | |||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             // Set layout whenever URL changes |             // Set layout whenever URL changes | ||||||
|             $scope.$watch("layout", function setLayout(layout) { |             $scope.$watch("layout", function setLayout(url) { | ||||||
|  |  | ||||||
|                 // Remove current keyboard |                 // Remove current keyboard | ||||||
|                 if (keyboard) { |                 if (keyboard) { | ||||||
| @@ -76,7 +81,21 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { | |||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 // Load new keyboard |                 // Load new keyboard | ||||||
|                 if (layout) { |                 if (url) { | ||||||
|  |  | ||||||
|  |                     // Retrieve layout JSON | ||||||
|  |                     $http({ | ||||||
|  |                         cache   : cacheService.languages, | ||||||
|  |                         method  : 'GET', | ||||||
|  |                         url     : url | ||||||
|  |                     }) | ||||||
|  |  | ||||||
|  |                     // Build OSK with retrieved layout | ||||||
|  |                     .success(function layoutRetrieved(layout) { | ||||||
|  |  | ||||||
|  |                         // Abort if the layout changed while we were waiting for a response | ||||||
|  |                         if ($scope.layout !== url) | ||||||
|  |                             return; | ||||||
|  |  | ||||||
|                         // Add OSK element |                         // Add OSK element | ||||||
|                         keyboard = new Guacamole.OnScreenKeyboard(layout); |                         keyboard = new Guacamole.OnScreenKeyboard(layout); | ||||||
| @@ -95,6 +114,8 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { | |||||||
|                             $rootScope.$broadcast('guacSyntheticKeyup', keysym); |                             $rootScope.$broadcast('guacSyntheticKeyup', keysym); | ||||||
|                         }; |                         }; | ||||||
|  |  | ||||||
|  |                     }); | ||||||
|  |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|             }); // end layout scope watch |             }); // end layout scope watch | ||||||
|   | |||||||
| @@ -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_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{}}", |         "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