mirror of
https://github.com/debauchee/barrier.git
synced 2026-05-11 10:56:25 +08:00
Merge changes from v1.8.8-rc1
This commit is contained in:
@@ -61,11 +61,11 @@ const KeyID MSWindowsKeyState::s_virtualKey[] =
|
||||
/* 0x012 */ { kKeyAlt_L }, // VK_MENU
|
||||
/* 0x013 */ { kKeyPause }, // VK_PAUSE
|
||||
/* 0x014 */ { kKeyCapsLock }, // VK_CAPITAL
|
||||
/* 0x015 */ { kKeyHangulKana }, // VK_HANGUL, VK_KANA
|
||||
/* 0x015 */ { kKeyKana }, // VK_HANGUL, VK_KANA
|
||||
/* 0x016 */ { kKeyNone }, // undefined
|
||||
/* 0x017 */ { kKeyNone }, // VK_JUNJA
|
||||
/* 0x018 */ { kKeyNone }, // VK_FINAL
|
||||
/* 0x019 */ { kKeyHanjaKanzi }, // VK_KANJI
|
||||
/* 0x019 */ { kKeyKanzi }, // VK_HANJA, VK_KANJI
|
||||
/* 0x01a */ { kKeyNone }, // undefined
|
||||
/* 0x01b */ { kKeyEscape }, // VK_ESCAPE
|
||||
/* 0x01c */ { kKeyHenkan }, // VK_CONVERT
|
||||
@@ -318,11 +318,11 @@ const KeyID MSWindowsKeyState::s_virtualKey[] =
|
||||
/* 0x112 */ { kKeyAlt_R }, // VK_MENU
|
||||
/* 0x113 */ { kKeyNone }, // VK_PAUSE
|
||||
/* 0x114 */ { kKeyNone }, // VK_CAPITAL
|
||||
/* 0x115 */ { kKeyNone }, // VK_KANA
|
||||
/* 0x116 */ { kKeyNone }, // VK_HANGUL
|
||||
/* 0x115 */ { kKeyHangul }, // VK_HANGUL
|
||||
/* 0x116 */ { kKeyNone }, // undefined
|
||||
/* 0x117 */ { kKeyNone }, // VK_JUNJA
|
||||
/* 0x118 */ { kKeyNone }, // VK_FINAL
|
||||
/* 0x119 */ { kKeyNone }, // VK_KANJI
|
||||
/* 0x119 */ { kKeyHanja }, // VK_HANJA
|
||||
/* 0x11a */ { kKeyNone }, // undefined
|
||||
/* 0x11b */ { kKeyNone }, // VK_ESCAPE
|
||||
/* 0x11c */ { kKeyNone }, // VK_CONVERT
|
||||
@@ -728,6 +728,10 @@ MSWindowsKeyState::mapKeyFromEvent(WPARAM charAndVirtKey,
|
||||
// that so we clear it.
|
||||
active &= ~s_controlAlt;
|
||||
}
|
||||
if (id == kKeyHangul) {
|
||||
// If shift-space is used to change input mode, clear shift modifier.
|
||||
active &= ~KeyModifierShift;
|
||||
}
|
||||
*maskOut = active;
|
||||
}
|
||||
|
||||
@@ -1071,13 +1075,8 @@ MSWindowsKeyState::getKeyMap(synergy::KeyMap& keyMap)
|
||||
}
|
||||
}
|
||||
|
||||
// add alt+printscreen
|
||||
if (m_buttonToVK[0x54u] == 0) {
|
||||
m_buttonToVK[0x54u] = VK_SNAPSHOT;
|
||||
}
|
||||
|
||||
// set virtual key to button table
|
||||
if (GetKeyboardLayout(0) == m_groups[g]) {
|
||||
if (activeLayout == m_groups[g]) {
|
||||
for (KeyButton i = 0; i < 512; ++i) {
|
||||
if (m_buttonToVK[i] != 0) {
|
||||
if (m_virtualKeyToButton[m_buttonToVK[i]] == 0) {
|
||||
@@ -1339,8 +1338,20 @@ MSWindowsKeyState::setWindowGroup(SInt32 group)
|
||||
}
|
||||
|
||||
KeyID
|
||||
MSWindowsKeyState::getKeyID(UINT virtualKey, KeyButton button)
|
||||
MSWindowsKeyState::getKeyID(UINT virtualKey, KeyButton button) const
|
||||
{
|
||||
// Some virtual keycodes have same values.
|
||||
// VK_HANGUL == VK_KANA, VK_HANJA == NK_KANJI
|
||||
// which are used to change the input mode of IME.
|
||||
// But they have different X11 keysym. So we should distinguish them.
|
||||
if ((LOWORD(m_keyLayout) & 0xffffu) == 0x0412u) { // 0x0412 : Korean Locale ID
|
||||
if (virtualKey == VK_HANGUL || virtualKey == VK_HANJA) {
|
||||
// If shift-space is used to change the input mode,
|
||||
// the extented bit is not set. So add it to get right key id.
|
||||
button |= 0x100u;
|
||||
}
|
||||
}
|
||||
|
||||
if ((button & 0x100u) != 0) {
|
||||
virtualKey += 0x100u;
|
||||
}
|
||||
@@ -1392,3 +1403,4 @@ MSWindowsKeyState::addKeyEntry(synergy::KeyMap& keyMap, synergy::KeyMap::KeyItem
|
||||
m_keyToVKMap[item.m_id] = static_cast<UINT>(item.m_client);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ public:
|
||||
(button should include the extended key bit), or kKeyNone if there is
|
||||
no such key.
|
||||
*/
|
||||
static KeyID getKeyID(UINT virtualKey, KeyButton button);
|
||||
KeyID getKeyID(UINT virtualKey, KeyButton button) const;
|
||||
|
||||
//! Map button to virtual key
|
||||
/*!
|
||||
|
||||
@@ -483,7 +483,23 @@ OSXScreen::postMouseEvent(CGPoint& pos) const
|
||||
// Fix for sticky keys
|
||||
CGEventFlags modifiers = m_keyState->getModifierStateAsOSXFlags();
|
||||
CGEventSetFlags(event, modifiers);
|
||||
|
||||
|
||||
// Set movement deltas to fix issues with certain 3D programs
|
||||
SInt64 deltaX = pos.x;
|
||||
deltaX -= m_xCursor;
|
||||
|
||||
SInt64 deltaY = pos.y;
|
||||
deltaY -= m_yCursor;
|
||||
|
||||
CGEventSetIntegerValueField(event, kCGMouseEventDeltaX, deltaX);
|
||||
CGEventSetIntegerValueField(event, kCGMouseEventDeltaY, deltaY);
|
||||
|
||||
double deltaFX = deltaX;
|
||||
double deltaFY = deltaY;
|
||||
|
||||
CGEventSetDoubleValueField(event, kCGMouseEventDeltaX, deltaFX);
|
||||
CGEventSetDoubleValueField(event, kCGMouseEventDeltaY, deltaFY);
|
||||
|
||||
CGEventPost(kCGHIDEventTap, event);
|
||||
|
||||
CFRelease(event);
|
||||
|
||||
@@ -160,15 +160,12 @@ XWindowsScreen::XWindowsScreen(
|
||||
|
||||
// primary/secondary screen only initialization
|
||||
if (m_isPrimary) {
|
||||
// start watching for events on other windows
|
||||
selectEvents(m_root);
|
||||
m_xi2detected = detectXI2();
|
||||
|
||||
if (m_xi2detected) {
|
||||
#ifdef HAVE_XI2
|
||||
m_xi2detected = detectXI2();
|
||||
if (m_xi2detected) {
|
||||
selectXIRawMotion();
|
||||
#endif
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
// start watching for events on other windows
|
||||
selectEvents(m_root);
|
||||
@@ -745,7 +742,7 @@ XWindowsScreen::registerHotKey(KeyID key, KeyModifierMask mask)
|
||||
LOG((CLOG_WARN "failed to register hotkey %s (id=%04x mask=%04x)", synergy::KeyMap::formatKey(key, mask).c_str(), key, mask));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LOG((CLOG_DEBUG "registered hotkey %s (id=%04x mask=%04x) as id=%d", synergy::KeyMap::formatKey(key, mask).c_str(), key, mask, id));
|
||||
return id;
|
||||
}
|
||||
@@ -827,7 +824,7 @@ void
|
||||
XWindowsScreen::fakeMouseButton(ButtonID button, bool press)
|
||||
{
|
||||
const unsigned int xButton = mapButtonToX(button);
|
||||
if (xButton != 0) {
|
||||
if (xButton > 0 && xButton < 11) {
|
||||
XTestFakeButtonEvent(m_display, xButton,
|
||||
press ? True : False, CurrentTime);
|
||||
XFlush(m_display);
|
||||
@@ -977,22 +974,6 @@ XWindowsScreen::saveShape()
|
||||
m_w = WidthOfScreen(DefaultScreenOfDisplay(m_display));
|
||||
m_h = HeightOfScreen(DefaultScreenOfDisplay(m_display));
|
||||
|
||||
#if HAVE_X11_EXTENSIONS_XRANDR_H
|
||||
if (m_xrandr){
|
||||
int numSizes;
|
||||
XRRScreenSize* xrrs;
|
||||
Rotation rotation;
|
||||
xrrs = XRRSizes(m_display, DefaultScreen(m_display), &numSizes);
|
||||
XRRRotations(m_display, DefaultScreen(m_display), &rotation);
|
||||
if (xrrs != NULL) {
|
||||
if (rotation & (RR_Rotate_90|RR_Rotate_270) ){
|
||||
m_w = xrrs->height;
|
||||
m_h = xrrs->width;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// get center of default screen
|
||||
m_xCenter = m_x + (m_w >> 1);
|
||||
m_yCenter = m_y + (m_h >> 1);
|
||||
@@ -1300,7 +1281,7 @@ XWindowsScreen::handleSystemEvent(const Event& event, void*)
|
||||
// handle the event ourself
|
||||
switch (xevent->type) {
|
||||
case CreateNotify:
|
||||
if (m_isPrimary) {
|
||||
if (m_isPrimary && !m_xi2detected) {
|
||||
// select events on new window
|
||||
selectEvents(xevent->xcreatewindow.window);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user