distinguish left/right Ctrl and Shift
This commit is contained in:
parent
2a7027f794
commit
23cc8c71a2
|
@ -24,6 +24,7 @@
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "PlatformConfig.h"
|
#include "PlatformConfig.h"
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
#include "InputConfigDialog.h"
|
#include "InputConfigDialog.h"
|
||||||
#include "ui_InputConfigDialog.h"
|
#include "ui_InputConfigDialog.h"
|
||||||
|
|
||||||
|
@ -231,7 +232,9 @@ KeyMapButton::~KeyMapButton()
|
||||||
void KeyMapButton::keyPressEvent(QKeyEvent* event)
|
void KeyMapButton::keyPressEvent(QKeyEvent* event)
|
||||||
{
|
{
|
||||||
if (!isChecked()) return QPushButton::keyPressEvent(event);
|
if (!isChecked()) return QPushButton::keyPressEvent(event);
|
||||||
printf("KEY PRESSED = %08X %08X | %08X %08X %08X | %08X\n", event->key(), event->modifiers(), event->nativeVirtualKey(), event->nativeModifiers(), event->nativeScanCode(), Qt::SHIFT);
|
|
||||||
|
printf("KEY PRESSED = %08X %08X | %08X %08X %08X\n", event->key(), event->modifiers(), event->nativeVirtualKey(), event->nativeModifiers(), event->nativeScanCode());
|
||||||
|
|
||||||
int key = event->key();
|
int key = event->key();
|
||||||
bool ismod = (key == Qt::Key_Control ||
|
bool ismod = (key == Qt::Key_Control ||
|
||||||
key == Qt::Key_Alt ||
|
key == Qt::Key_Alt ||
|
||||||
|
@ -247,6 +250,8 @@ printf("KEY PRESSED = %08X %08X | %08X %08X %08X | %08X\n", event->key(), event-
|
||||||
|
|
||||||
if (!ismod)
|
if (!ismod)
|
||||||
key |= event->modifiers();
|
key |= event->modifiers();
|
||||||
|
else if (IsRightModKey(event))
|
||||||
|
key |= (1<<31);
|
||||||
|
|
||||||
*mapping = key;
|
*mapping = key;
|
||||||
click();
|
click();
|
||||||
|
@ -279,14 +284,17 @@ QString KeyMapButton::mappingText()
|
||||||
{
|
{
|
||||||
int key = *mapping;
|
int key = *mapping;
|
||||||
|
|
||||||
|
if (key == -1) return "None";
|
||||||
|
|
||||||
|
QString isright = (key & (1<<31)) ? "Right " : "Left ";
|
||||||
|
key &= ~(1<<31);
|
||||||
|
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
case -1: return "None";
|
case Qt::Key_Control: return isright + "Ctrl";
|
||||||
|
|
||||||
case Qt::Key_Control: return "Ctrl";
|
|
||||||
case Qt::Key_Alt: return "Alt";
|
case Qt::Key_Alt: return "Alt";
|
||||||
case Qt::Key_AltGr: return "AltGr";
|
case Qt::Key_AltGr: return "AltGr";
|
||||||
case Qt::Key_Shift: return "Shift";
|
case Qt::Key_Shift: return isright + "Shift";
|
||||||
case Qt::Key_Meta: return "Meta";
|
case Qt::Key_Meta: return "Meta";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
|
||||||
|
|
||||||
class EmuThread : public QThread
|
class EmuThread : public QThread
|
||||||
|
@ -131,4 +132,24 @@ private:
|
||||||
QAction* actInputConfig;
|
QAction* actInputConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: MacOS version of this!
|
||||||
|
// distinguish between left and right modifier keys (Ctrl, Alt, Shift)
|
||||||
|
// Qt provides no real cross-platform way to do this, so here we go
|
||||||
|
// for Windows and Linux we can distinguish via scancodes (but both
|
||||||
|
// provide different scancodes)
|
||||||
|
#ifdef __WIN32__
|
||||||
|
inline bool IsRightModKey(QKeyEvent* event)
|
||||||
|
{
|
||||||
|
quint32 scan = event->nativeScanCode();
|
||||||
|
return (scan == 0x11D || scan == 0x138 || scan == 0x36);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
inline bool IsRightModKey(QKeyEvent* event)
|
||||||
|
{
|
||||||
|
quint32 scan = event->nativeScanCode();
|
||||||
|
return (scan == 0x69 || scan == 0x6C || scan == 0x3E);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // MAIN_H
|
#endif // MAIN_H
|
||||||
|
|
Loading…
Reference in New Issue