Skip to content

Commit 590bf93

Browse files
committed
[macOS] correct sendkey.
1 parent 6377fe4 commit 590bf93

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

Sources/OpenKey/macOS/ModernKey/OpenKey.mm

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,13 @@ void InsertKeyLength(const Uint8& len) {
206206

207207
void SendPureCharacter(const Uint16& ch) {
208208
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
209+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
209210
CGEventKeyboardSetUnicodeString(_newEventDown, 1, &ch);
211+
CGEventKeyboardSetUnicodeString(_newEventUp, 1, &ch);
210212
CGEventTapPostEvent(_proxy, _newEventDown);
213+
CGEventTapPostEvent(_proxy, _newEventUp);
211214
CFRelease(_newEventDown);
215+
CFRelease(_newEventUp);
212216
if (IS_DOUBLE_CODE(vCodeTable)) {
213217
InsertKeyLength(1);
214218
}
@@ -235,26 +239,35 @@ void SendKeyCode(Uint32 data) {
235239
CGEventSetFlags(_newEventUp, _privateFlag);
236240
CGEventTapPostEvent(_proxy, _newEventDown);
237241
CGEventTapPostEvent(_proxy, _newEventUp);
238-
CFRelease(_newEventUp);
239242
} else {
240243
if (vCodeTable == 0) { //unicode 2 bytes code
241244
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
245+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
242246
CGEventKeyboardSetUnicodeString(_newEventDown, 1, &_newChar);
247+
CGEventKeyboardSetUnicodeString(_newEventUp, 1, &_newChar);
243248
CGEventTapPostEvent(_proxy, _newEventDown);
249+
CGEventTapPostEvent(_proxy, _newEventUp);
244250
} else if (vCodeTable == 1 || vCodeTable == 2 || vCodeTable == 4) { //others such as VNI Windows, TCVN3: 1 byte code
245251
_newCharHi = HIBYTE(_newChar);
246252
_newChar = LOBYTE(_newChar);
247253

248254
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
255+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
249256
CGEventKeyboardSetUnicodeString(_newEventDown, 1, &_newChar);
257+
CGEventKeyboardSetUnicodeString(_newEventUp, 1, &_newChar);
250258
CGEventTapPostEvent(_proxy, _newEventDown);
251-
259+
CGEventTapPostEvent(_proxy, _newEventUp);
252260
if (_newCharHi > 32) {
253261
if (vCodeTable == 2) //VNI
254262
InsertKeyLength(2);
263+
CFRelease(_newEventDown);
264+
CFRelease(_newEventUp);
255265
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
266+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
256267
CGEventKeyboardSetUnicodeString(_newEventDown, 1, &_newCharHi);
268+
CGEventKeyboardSetUnicodeString(_newEventUp, 1, &_newCharHi);
257269
CGEventTapPostEvent(_proxy, _newEventDown);
270+
CGEventTapPostEvent(_proxy, _newEventUp);
258271
} else {
259272
if (vCodeTable == 2) //VNI
260273
InsertKeyLength(1);
@@ -266,11 +279,15 @@ void SendKeyCode(Uint32 data) {
266279
_uniChar[1] = _newCharHi > 0 ? (_unicodeCompoundMark[_newCharHi - 1]) : 0;
267280
InsertKeyLength(_newCharHi > 0 ? 2 : 1);
268281
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
282+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
269283
CGEventKeyboardSetUnicodeString(_newEventDown, (_newCharHi > 0 ? 2 : 1), _uniChar);
284+
CGEventKeyboardSetUnicodeString(_newEventUp, (_newCharHi > 0 ? 2 : 1), _uniChar);
270285
CGEventTapPostEvent(_proxy, _newEventDown);
286+
CGEventTapPostEvent(_proxy, _newEventUp);
271287
}
272288
}
273289
CFRelease(_newEventDown);
290+
CFRelease(_newEventUp);
274291
}
275292

276293
void SendEmptyCharacter() {
@@ -283,9 +300,13 @@ void SendEmptyCharacter() {
283300
}
284301

285302
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
303+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
286304
CGEventKeyboardSetUnicodeString(_newEventDown, 1, &_newChar);
305+
CGEventKeyboardSetUnicodeString(_newEventUp, 1, &_newChar);
287306
CGEventTapPostEvent(_proxy, _newEventDown);
307+
CGEventTapPostEvent(_proxy, _newEventUp);
288308
CFRelease(_newEventDown);
309+
CFRelease(_newEventUp);
289310
}
290311

291312
void SendVirtualKey(const Byte& vKey) {
@@ -427,9 +448,13 @@ void SendNewCharString(const bool& dataFromMacro=false, const Uint16& offset=0)
427448
}
428449

429450
_newEventDown = CGEventCreateKeyboardEvent(myEventSource, 0, true);
451+
_newEventUp = CGEventCreateKeyboardEvent(myEventSource, 0, false);
430452
CGEventKeyboardSetUnicodeString(_newEventDown, _willContinuteSending ? 16 : _newCharSize - offset, _newCharString);
453+
CGEventKeyboardSetUnicodeString(_newEventUp, _willContinuteSending ? 16 : _newCharSize - offset, _newCharString);
431454
CGEventTapPostEvent(_proxy, _newEventDown);
455+
CGEventTapPostEvent(_proxy, _newEventUp);
432456
CFRelease(_newEventDown);
457+
CFRelease(_newEventUp);
433458

434459
if (_willContinuteSending) {
435460
SendNewCharString(dataFromMacro, dataFromMacro ? _k : 16);

0 commit comments

Comments
 (0)