Changeset 78635 in vbox
- Timestamp:
- May 21, 2019 2:27:39 PM (6 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
r78567 r78635 1608 1608 1609 1609 QIManagerDialog *pSoftKeyboardDialog; 1610 UISoftKeyboardDialogFactory dialogFactory( actionPool(), machine().GetName());1610 UISoftKeyboardDialogFactory dialogFactory(uisession(), actionPool(), machine().GetName()); 1611 1611 dialogFactory.prepare(pSoftKeyboardDialog, activeMachineWindow()); 1612 1612 if (pSoftKeyboardDialog) -
trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboard.cpp
r78606 r78635 19 19 #include <QApplication> 20 20 #include <QFile> 21 #include <Q PushButton>21 #include <QToolButton> 22 22 #include <QXmlStreamReader> 23 23 #include <QVBoxLayout> … … 26 26 #include "QIDialogButtonBox.h" 27 27 #include "UIExtraDataManager.h" 28 #include "UISession.h" 28 29 #include "UISoftKeyboard.h" 29 30 #include "VBoxGlobal.h" … … 38 39 QString m_strLabel; 39 40 LONG m_scanCode; 41 LONG m_scanCodePrefix; 40 42 }; 41 43 … … 74 76 *********************************************************************************************************************************/ 75 77 76 class UISoftKeyboardKey : public Q PushButton78 class UISoftKeyboardKey : public QToolButton 77 79 { 78 80 Q_OBJECT; … … 81 83 82 84 UISoftKeyboardKey(QWidget *pParent = 0); 85 83 86 void setWidth(int iWidth); 84 87 int width() const; 88 89 void setScanCode(LONG scanCode); 90 LONG scanCode() const; 91 92 void setScanCodePrefix(LONG scanCode); 93 LONG scanCodePrefix() const; 94 95 QVector<LONG> scanCodeWithPrefix() const; 96 85 97 void updateFontSize(float multiplier); 86 98 87 protected:88 89 99 private: 90 100 91 int m_iWidth; 92 int m_iDefaultPixelSize; 93 int m_iDefaultPointSize; 101 int m_iWidth; 102 int m_iDefaultPixelSize; 103 int m_iDefaultPointSize; 104 LONG m_scanCode; 105 LONG m_scanCodePrefix; 94 106 }; 95 107 … … 160 172 row.m_keys.append(SoftKeyboardKey()); 161 173 SoftKeyboardKey &key = row.m_keys.last(); 174 key.m_scanCode = 0; 175 key.m_scanCodePrefix = 0; 162 176 while (m_xmlReader.readNextStartElement()) 163 177 { … … 165 179 key.m_iWidth = m_xmlReader.readElementText().toInt(); 166 180 else if (m_xmlReader.name() == "label") 167 key.m_strLabel = m_xmlReader.readElementText(); 181 { 182 if (key.m_strLabel.isEmpty()) 183 key.m_strLabel = m_xmlReader.readElementText(); 184 else 185 key.m_strLabel = QString("%1%2%3").arg(key.m_strLabel).arg("\n").arg(m_xmlReader.readElementText()); 186 } 168 187 else if (m_xmlReader.name() == "scancode") 169 key.m_scanCode = m_xmlReader.readElementText().toInt(); 188 { 189 QString strCode = m_xmlReader.readElementText(); 190 bool fOk = false; 191 key.m_scanCode = strCode.toInt(&fOk, 16); 192 if (!fOk) 193 key.m_scanCode = 0; 194 } 195 else if (m_xmlReader.name() == "scancodeprefix") 196 { 197 QString strCode = m_xmlReader.readElementText(); 198 bool fOk = false; 199 key.m_scanCodePrefix = strCode.toInt(&fOk, 16); 200 if (!fOk) 201 key.m_scanCodePrefix = 0; 202 } 170 203 else 171 204 m_xmlReader.skipCurrentElement(); … … 179 212 180 213 UISoftKeyboardKey::UISoftKeyboardKey(QWidget *pParent /* = 0 */) 181 :Q PushButton(pParent)214 :QToolButton(pParent) 182 215 , m_iWidth(1) 183 216 { … … 194 227 { 195 228 return m_iWidth; 229 } 230 231 void UISoftKeyboardKey::setScanCode(LONG scanCode) 232 { 233 m_scanCode = scanCode; 234 } 235 236 LONG UISoftKeyboardKey::scanCode() const 237 { 238 return m_scanCode; 239 } 240 241 void UISoftKeyboardKey::setScanCodePrefix(LONG scanCodePrefix) 242 { 243 m_scanCodePrefix = scanCodePrefix; 244 } 245 246 LONG UISoftKeyboardKey::scanCodePrefix() const 247 { 248 return m_scanCodePrefix; 196 249 } 197 250 … … 238 291 pKey->setVisible(true); 239 292 pKey->updateFontSize(fMultiplier); 240 pKey->setGeometry(iX, 0, fMultiplier * pKey->width(), height()); 293 int iKeyWidth = fMultiplier * pKey->width(); 294 if (i != m_keys.size() - 1) 295 pKey->setGeometry(iX, 0, iKeyWidth, height()); 296 else 297 { 298 pKey->setGeometry(iX, 0, width() - iX - 1, height()); 299 } 241 300 iX += fMultiplier * pKey->width(); 242 301 } 243 302 } 244 303 245 246 304 /********************************************************************************************************************************* 247 305 * UISoftKeyboard implementation. * 248 306 *********************************************************************************************************************************/ 249 307 250 UISoftKeyboard::UISoftKeyboard(EmbedTo /* enmEmbedding */, 251 QWidget *pParent, QString strMachineName /* = QString()*/,308 UISoftKeyboard::UISoftKeyboard(EmbedTo /* enmEmbedding */, QWidget *pParent, 309 UISession *pSession, QString strMachineName /* = QString()*/, 252 310 bool fShowToolbar /* = false */) 253 311 :QIWithRetranslateUI<QWidget>(pParent) 312 , m_pSession(pSession) 254 313 , m_pMainLayout(0) 255 314 , m_pContainerWidget(0) … … 283 342 } 284 343 344 void UISoftKeyboard::sltHandleKeyPress() 345 { 346 UISoftKeyboardKey *pKey = qobject_cast<UISoftKeyboardKey*>(sender()); 347 if (!pKey) 348 return; 349 QVector<LONG> sequence; 350 if (pKey->scanCodePrefix() != 0) 351 sequence << pKey->scanCodePrefix(); 352 sequence << pKey->scanCode(); 353 keyboard().PutScancodes(sequence); 354 printf("sending for press: "); 355 for (int i = 0; i < sequence.size(); ++i) 356 printf("%#04x ", sequence[i]); 357 printf("\n"); 358 } 359 360 void UISoftKeyboard::sltHandleKeyRelease() 361 { 362 UISoftKeyboardKey *pKey = qobject_cast<UISoftKeyboardKey*>(sender()); 363 if (!pKey) 364 return; 365 366 QVector<LONG> sequence; 367 if (pKey->scanCodePrefix() != 0) 368 sequence << pKey->scanCodePrefix(); 369 sequence << (pKey->scanCode() | 0x80); 370 keyboard().PutScancodes(sequence); 371 printf("sending for release: "); 372 for (int i = 0; i < sequence.size(); ++i) 373 printf("%#04x ", sequence[i]); 374 printf("\n"); 375 } 376 285 377 void UISoftKeyboard::prepareObjects() 286 378 { … … 295 387 return; 296 388 m_pContainerWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); 297 //m_pContainerWidget->setStyleSheet("background-color:red;");298 //m_pContainerWidget->setAutoFillBackground(false);299 300 389 m_pMainLayout->addWidget(m_pContainerWidget); 301 390 } … … 332 421 { 333 422 UISoftKeyboardRow *pNewRow = new UISoftKeyboardRow(m_pContainerWidget); 334 if ( i == 0)335 pNewRow->setStyleSheet("background-color:yellow;");336 else337 pNewRow->setStyleSheet("background-color:green;");338 339 423 m_rows.push_back(pNewRow); 340 424 pNewRow->m_iHeight = layout.m_rows[i].m_iHeight; … … 345 429 pNewRow->m_iWidth += layout.m_rows[i].m_keys[j].m_iWidth; 346 430 UISoftKeyboardKey *pKey = new UISoftKeyboardKey(pNewRow); 431 if (!pKey) 432 continue; 433 connect(pKey, &UISoftKeyboardKey::pressed, this, &UISoftKeyboard::sltHandleKeyPress); 434 connect(pKey, &UISoftKeyboardKey::released, this, &UISoftKeyboard::sltHandleKeyRelease); 347 435 pNewRow->m_keys.append(pKey); 348 436 pKey->setText(layout.m_rows[i].m_keys[j].m_strLabel); 349 437 pKey->setWidth(layout.m_rows[i].m_keys[j].m_iWidth); 438 pKey->setScanCode(layout.m_rows[i].m_keys[j].m_scanCode); 439 pKey->setScanCodePrefix(layout.m_rows[i].m_keys[j].m_scanCodePrefix); 350 440 pKey->hide(); 351 441 } 442 printf("row width %d %d\n", i, pNewRow->m_iWidth); 352 443 m_iMaxRowWidth = qMax(m_iMaxRowWidth, pNewRow->m_iWidth); 353 444 } 354 printf("total height %d %d\n", m_iTotalRowHeight, m_iMaxRowWidth);355 356 357 // return;358 // for (int i = 0; i < layout.m_rows.size(); ++i)359 // {360 // QHBoxLayout *pRowLayout = new QHBoxLayout;361 // pRowLayout->setSpacing(0);362 // for (int j = 0; j < layout.m_rows[i].m_keys.size(); ++j)363 // {364 // UISoftKeyboardKey *pKey = new UISoftKeyboardKey;365 // pRowLayout->addWidget(pKey);366 367 // //m_pContainerLayout->addWidget(pKey, i, j);368 // //pKey->setFixedSize(layout.m_rows[i].m_keys[j].m_iWidth, layout.m_rows[i].m_iHeight);369 // pKey->setText(layout.m_rows[i].m_keys[j].m_strLabel);370 // //if (j != 3)371 372 373 // // else374 // //m_pContainerLayout->setColumnStretch(j, 0);375 // //m_pContainerLayout->addSpacing(2);376 // // QSpacerItem *pSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);377 // // m_pContainerLayout->addItem(pSpacer);378 // }379 // //pRowLayout->addStretch(1);380 // //m_pContainerLayout->setColumnStretch(layout.m_rows[i].m_keys.size()-1, 1);381 // m_pContainerLayout->addLayout(pRowLayout);382 // }383 445 } 384 446 … … 405 467 pRow->setVisible(true); 406 468 y += fMultiplier * pRow->m_iHeight; 407 // pRow->setAutoFillBackground(true); 408 // pRow->raise(); 409 410 pRow->updateLayout(); 411 412 // m_pContainerWidget->lower(); 413 // pRow->update(); 414 469 pRow->updateLayout(); 415 470 } 416 471 update(); 417 /* Compute the size multiplier: */ 418 472 } 473 474 CKeyboard& UISoftKeyboard::keyboard() const 475 { 476 return m_pSession->keyboard(); 419 477 } 420 478 -
trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboard.h
r78606 r78635 35 35 36 36 /* Forward declarations: */ 37 class UISession; 37 38 class UISoftKeyboardKey; 38 39 class UISoftKeyboardRow; … … 48 49 public: 49 50 50 UISoftKeyboard(EmbedTo enmEmbedding, QWidget *pParent, 51 UISoftKeyboard(EmbedTo enmEmbedding, QWidget *pParent, UISession *pSession, 51 52 QString strMachineName = QString(), bool fShowToolbar = false); 52 53 ~UISoftKeyboard(); … … 59 60 private slots: 60 61 62 void sltHandleKeyPress(); 63 void sltHandleKeyRelease(); 64 61 65 private: 62 66 … … 68 72 void parseLayout(); 69 73 void updateLayout(); 74 CKeyboard& keyboard() const; 70 75 76 UISession *m_pSession; 71 77 QHBoxLayout *m_pMainLayout; 72 78 QWidget *m_pContainerWidget; -
trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboardDialog.cpp
r78567 r78635 25 25 #include "UIIconPool.h" 26 26 #include "UIGuestControlConsole.h" 27 #include "UISession.h" 27 28 #include "UISoftKeyboardDialog.h" 28 29 #include "UISoftKeyboard.h" … … 37 38 *********************************************************************************************************************************/ 38 39 39 UISoftKeyboardDialogFactory::UISoftKeyboardDialogFactory(UI ActionPool *pActionPool /* = 0 */,40 UISoftKeyboardDialogFactory::UISoftKeyboardDialogFactory(UISession *pSession /* = 0 */, UIActionPool *pActionPool /* = 0 */, 40 41 const QString &strMachineName /* = QString() */) 41 : m_pActionPool(pActionPool) 42 : m_pSession(pSession) 43 , m_pActionPool(pActionPool) 42 44 , m_strMachineName(strMachineName) 43 45 { … … 46 48 void UISoftKeyboardDialogFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterWidget) 47 49 { 48 pDialog = new UISoftKeyboardDialog(pCenterWidget, m_p ActionPool, m_strMachineName);50 pDialog = new UISoftKeyboardDialog(pCenterWidget, m_pSession, m_pActionPool, m_strMachineName); 49 51 } 50 52 … … 55 57 56 58 UISoftKeyboardDialog::UISoftKeyboardDialog(QWidget *pCenterWidget, 59 UISession *pSession, 57 60 UIActionPool *pActionPool, 58 61 const QString &strMachineName /* = QString() */) 59 62 : QIWithRetranslateUI<QIManagerDialog>(pCenterWidget) 63 , m_pSession(pSession) 60 64 , m_pActionPool(pActionPool) 61 65 , m_strMachineName(strMachineName) … … 80 84 { 81 85 /* Create widget: */ 82 UISoftKeyboard *pSoftKeyboard = new UISoftKeyboard(EmbedTo_Dialog, 0, "");86 UISoftKeyboard *pSoftKeyboard = new UISoftKeyboard(EmbedTo_Dialog, 0, m_pSession, ""); 83 87 84 88 if (pSoftKeyboard) -
trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboardDialog.h
r78567 r78635 35 35 /* Forward declarations: */ 36 36 class UIActionPool; 37 class UISession; 37 38 class UISoftKeyboardDialog; 38 39 class CGuest; … … 43 44 public: 44 45 45 UISoftKeyboardDialogFactory(UI ActionPool *pActionPool = 0, const QString &strMachineName = QString());46 UISoftKeyboardDialogFactory(UISession *pSession = 0,UIActionPool *pActionPool = 0, const QString &strMachineName = QString()); 46 47 47 48 protected: … … 51 52 virtual void create(QIManagerDialog *&pDialog, QWidget *pCenterWidget) /* override */; 52 53 54 UISession *m_pSession; 53 55 UIActionPool *m_pActionPool; 54 56 QString m_strMachineName; … … 66 68 * @param pCenterWidget Passes the widget reference to center according to. 67 69 * @param pActionPool Passes the action-pool reference. */ 68 UISoftKeyboardDialog(QWidget *pCenterWidget, UI ActionPool *pActionPool, const QString &strMachineName = QString());70 UISoftKeyboardDialog(QWidget *pCenterWidget, UISession *pSession, UIActionPool *pActionPool, const QString &strMachineName = QString()); 69 71 70 72 protected: … … 103 105 private: 104 106 107 UISession *m_pSession; 105 108 UIActionPool *m_pActionPool; 106 QString m_strMachineName;109 QString m_strMachineName; 107 110 }; 108 111 -
trunk/src/VBox/Frontends/VirtualBox/xml/us_layout.xml
r78595 r78635 5 5 <key> 6 6 <width>50</width> 7 <label>Key1</label> 8 <scancode>X11</scancode> 9 </key> 10 <key> 11 <width>150</width> 12 <label>Key2</label> 13 <scancode>X11</scancode> 14 </key> 15 <key> 16 <width>20</width> 17 <label>Key3</label> 18 <scancode>X11</scancode> 19 </key> 20 <key> 21 <width>50</width> 22 <label>Key4</label> 23 <scancode>X11</scancode> 24 </key> 7 <label>Esc</label> 8 <position>110</position> 9 <scancode>0x01</scancode> 10 </key> 11 <key> 12 <width>50</width> 13 <label>F1</label> 14 <position>112</position> 15 <scancode>0x3b</scancode> 16 </key> 17 <key> 18 <width>50</width> 19 <label>F2</label> 20 <position>113</position> 21 <scancode>0x3c</scancode> 22 </key> 23 <key> 24 <width>50</width> 25 <label>F3</label> 26 <position>114</position> 27 <scancode>0x3d</scancode> 28 </key> 29 <key> 30 <width>50</width> 31 <label>F4</label> 32 <position>115</position> 33 <scancode>0x3e</scancode> 34 </key> 35 <key> 36 <width>50</width> 37 <label>F5</label> 38 <position>116</position> 39 <scancode>0x3f</scancode> 40 </key> 41 <key> 42 <width>50</width> 43 <label>F6</label> 44 <position>117</position> 45 <scancode>0x40</scancode> 46 </key> 47 <key> 48 <width>50</width> 49 <label>F7</label> 50 <position>188</position> 51 <scancode>0x41</scancode> 52 </key> 53 <key> 54 <width>50</width> 55 <label>F8</label> 56 <position>119</position> 57 <scancode>0x42</scancode> 58 </key> 59 <key> 60 <width>50</width> 61 <label>F9</label> 62 <position>120</position> 63 <scancode>0x43</scancode> 64 </key> 65 <key> 66 <width>50</width> 67 <label>F10</label> 68 <position>121</position> 69 <scancode>0x44</scancode> 70 </key> 71 <key> 72 <width>50</width> 73 <label>F11</label> 74 <position>122</position> 75 <scancode>0x57</scancode> 76 </key> 77 <key> 78 <width>50</width> 79 <label>F12</label> 80 <position>123</position> 81 <scancode>0x58</scancode> 82 </key> 83 </row> 84 <row> 85 <height>50</height> 86 <key> 87 <width>50</width> 88 <label>~</label> 89 <label>`</label> 90 <position>1</position> 91 <scancode>0x29</scancode> 92 </key> 93 <key> 94 <width>50</width> 95 <label>!</label> 96 <label>1</label> 97 <position>2</position> 98 <scancode>0x02</scancode> 99 </key> 100 <key> 101 <width>50</width> 102 <label>@</label> 103 <label>2</label> 104 <position>3</position> 105 <scancode>0x03</scancode> 106 </key> 107 <key> 108 <width>50</width> 109 <label>#</label> 110 <label>3</label> 111 <position>4</position> 112 <scancode>0x04</scancode> 113 </key> 114 <key> 115 <width>50</width> 116 <label>$</label> 117 <label>4</label> 118 <position>5</position> 119 <scancode>0x05</scancode> 120 </key> 121 <key> 122 <width>50</width> 123 <label>%</label> 124 <label>5</label> 125 <position>6</position> 126 <scancode>0x06</scancode> 127 </key> 128 <key> 129 <width>50</width> 130 <label>^</label> 131 <label>6</label> 132 <position>7</position> 133 <scancode>0x07</scancode> 134 </key> 135 <key> 136 <width>50</width> 137 <label>&</label> 138 <label>7</label> 139 <position>8</position> 140 <scancode>0x08</scancode> 141 </key> 142 <key> 143 <width>50</width> 144 <label>*</label> 145 <label>8</label> 146 <position>9</position> 147 <scancode>0x09</scancode> 148 </key> 149 <key> 150 <width>50</width> 151 <label>(</label> 152 <label>9</label> 153 <position>10</position> 154 <scancode>0x0a</scancode> 155 </key> 156 <key> 157 <width>50</width> 158 <label>)</label> 159 <label>0</label> 160 <position>11</position> 161 <scancode>0x0b</scancode> 162 </key> 163 <key> 164 <width>50</width> 165 <label>_</label> 166 <label>-</label> 167 <position>12</position> 168 <scancode>0x0c</scancode> 169 </key> 170 <key> 171 <width>50</width> 172 <label>+</label> 173 <label>=</label> 174 <position>13</position> 175 <scancode>0x0d</scancode> 176 </key> 177 <key> 178 <width>80</width> 179 <label>Backspace</label> 180 <position>14</position> 181 <scancode>0x0e</scancode> 182 </key> 183 </row> 184 <row> 185 <height>50</height> 186 <key> 187 <width>70</width> 188 <label>Tab</label> 189 <position>16</position> 190 <scancode>0x0f</scancode> 191 </key> 192 <key> 193 <width>50</width> 194 <label>Q</label> 195 <position>17</position> 196 <scancode>0x10</scancode> 197 </key> 198 <key> 199 <width>50</width> 200 <label>W</label> 201 <position>18</position> 202 <scancode>0x11</scancode> 203 </key> 204 <key> 205 <width>50</width> 206 <label>E</label> 207 <position>19</position> 208 <scancode>0x12</scancode> 209 </key> 210 <key> 211 <width>50</width> 212 <label>R</label> 213 <position>20</position> 214 <scancode>0x13</scancode> 215 </key> 216 <key> 217 <width>50</width> 218 <label>T</label> 219 <position>21</position> 220 <scancode>0x14</scancode> 221 </key> 222 <key> 223 <width>50</width> 224 <label>Y</label> 225 <position>22</position> 226 <scancode>0x15</scancode> 227 </key> 228 <key> 229 <width>50</width> 230 <label>U</label> 231 <position>23</position> 232 <scancode>0x16</scancode> 233 </key> 234 <key> 235 <width>50</width> 236 <label>I</label> 237 <position>24</position> 238 <scancode>0x17</scancode> 239 </key> 240 <key> 241 <width>50</width> 242 <label>O</label> 243 <position>25</position> 244 <scancode>0x18</scancode> 245 </key> 246 <key> 247 <width>50</width> 248 <label>P</label> 249 <position>26</position> 250 <scancode>0x19</scancode> 251 </key> 252 <key> 253 <width>50</width> 254 <label>{</label> 255 <label>[</label> 256 <position>27</position> 257 <scancode>0x1a</scancode> 258 </key> 259 <key> 260 <width>50</width> 261 <label>}</label> 262 <label>]</label> 263 <position>28</position> 264 <scancode>0x1b</scancode> 265 </key> 266 <key> 267 <width>60</width> 268 <label>|</label> 269 <label>\</label> 270 <position>29</position> 271 <scancode>0x2b</scancode> 272 </key> 273 </row> 25 274 275 <row> 276 <height>50</height> 277 <key> 278 <width>70</width> 279 <label>CapsLock</label> 280 <position>30</position> 281 <scancode>0x3a</scancode> 282 </key> 283 <key> 284 <width>50</width> 285 <label>A</label> 286 <position>31</position> 287 <scancode>0x1e</scancode> 288 </key> 289 <key> 290 <width>50</width> 291 <label>S</label> 292 <position>32</position> 293 <scancode>0x1f</scancode> 294 </key> 295 <key> 296 <width>50</width> 297 <label>D</label> 298 <position>33</position> 299 <scancode>0x20</scancode> 300 </key> 301 <key> 302 <width>50</width> 303 <label>F</label> 304 <position>34</position> 305 <scancode>0x21</scancode> 306 </key> 307 <key> 308 <width>50</width> 309 <label>G</label> 310 <position>35</position> 311 <scancode>0x22</scancode> 312 </key> 313 <key> 314 <width>50</width> 315 <label>H</label> 316 <position>36</position> 317 <scancode>0x23</scancode> 318 </key> 319 <key> 320 <width>50</width> 321 <label>J</label> 322 <position>37</position> 323 <scancode>0x24</scancode> 324 </key> 325 <key> 326 <width>50</width> 327 <label>K</label> 328 <position>38</position> 329 <scancode>0x25</scancode> 330 </key> 331 <key> 332 <width>50</width> 333 <label>L</label> 334 <position>39</position> 335 <scancode>0x26</scancode> 336 </key> 337 <key> 338 <width>50</width> 339 <label>:</label> 340 <label>;</label> 341 <position>40</position> 342 <scancode>0x27</scancode> 343 </key> 344 <key> 345 <width>50</width> 346 <label>"</label> 347 <label>'</label> 348 <position>41</position> 349 <scancode>0x28</scancode> 350 </key> 351 <key> 352 <width>110</width> 353 <label>Enter</label> 354 <position>43</position> 355 <scancode>0x1c</scancode> 356 </key> 357 </row> 358 <row> 359 <height>50</height> 360 <key> 361 <width>115</width> 362 <label>Shift</label> 363 <position>44</position> 364 <scancode>0x2a</scancode> 365 </key> 366 <key> 367 <width>50</width> 368 <label>Z</label> 369 <position>46</position> 370 <scancode>0x2c</scancode> 371 </key> 372 <key> 373 <width>50</width> 374 <label>X</label> 375 <position>47</position> 376 <scancode>0x2d</scancode> 377 </key> 378 <key> 379 <width>50</width> 380 <label>C</label> 381 <position>48</position> 382 <scancode>0x2e</scancode> 383 </key> 384 <key> 385 <width>50</width> 386 <label>V</label> 387 <position>49</position> 388 <scancode>0x2f</scancode> 389 </key> 390 <key> 391 <width>50</width> 392 <label>B</label> 393 <position>50</position> 394 <scancode>0x30</scancode> 395 </key> 396 <key> 397 <width>50</width> 398 <label>N</label> 399 <position>51</position> 400 <scancode>0x31</scancode> 401 </key> 402 <key> 403 <width>50</width> 404 <label>M</label> 405 <position>52</position> 406 <scancode>0x32</scancode> 407 </key> 408 <key> 409 <width>50</width> 410 <label><</label> 411 <label>,</label> 412 <position>53</position> 413 <scancode>0x33</scancode> 414 </key> 415 <key> 416 <width>50</width> 417 <label>></label> 418 <label>.</label> 419 <position>54</position> 420 <scancode>0x34</scancode> 421 </key> 422 <key> 423 <width>50</width> 424 <label>?</label> 425 <label>/</label> 426 <position>55</position> 427 <scancode>0x35</scancode> 428 </key> 429 <key> 430 <width>115</width> 431 <label>Shift</label> 432 <position>57</position> 433 <scancode>0x36</scancode> 434 </key> 26 435 </row> 27 436 28 437 <row> 29 <height>30</height> 30 <key> 31 <width>150</width> 32 <label>Key2</label> 33 <scancode>X11</scancode> 34 </key> 35 <key> 36 <width>20</width> 37 <label>Key3</label> 38 <scancode>X11</scancode> 39 </key> 40 <key> 41 <width>50</width> 42 <label>Key4</label> 43 <scancode>X11</scancode> 438 <height>50</height> 439 <key> 440 <width>90</width> 441 <label>Ctrl</label> 442 <position>58</position> 443 <scancode>0x1d</scancode> 444 </key> 445 <key> 446 <width>50</width> 447 <label>Win</label> 448 <scancodeprefix>0xe0</scancodeprefix> 449 <scancode>0x5b</scancode> 450 </key> 451 <key> 452 <width>70</width> 453 <position>60</position> 454 <label>Alt</label> 455 <scancode>0x38</scancode> 456 </key> 457 <key> 458 <width>240</width> 459 <position>61</position> 460 <scancode>0x39</scancode> 461 </key> 462 <key> 463 <width>70</width> 464 <label>AltGr</label> 465 <scancodeprefix>0xe0</scancodeprefix> 466 <scancode>0x38</scancode> 467 </key> 468 <key> 469 <width>50</width> 470 <label>Win</label> 471 <scancodeprefix>0xe0</scancodeprefix> 472 <scancode>0x5c</scancode> 473 </key> 474 <key> 475 <width>70</width> 476 <label>Menu</label> 477 <scancodeprefix>0xe0</scancodeprefix> 478 <scancode>0x5d</scancode> 479 </key> 480 <key> 481 <width>90</width> 482 <label>Ctrl</label> 483 <scancodeprefix>0xe0</scancodeprefix> 484 <scancode>0x1d</scancode> 44 485 </key> 45 486
Note:
See TracChangeset
for help on using the changeset viewer.