diff options
| author | trustable-code <krauter.simon@arcor.de> | 2018-05-11 18:18:12 +0200 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2018-05-11 18:18:12 +0200 |
| commit | b0efefc389e7666b3119f15781c403c0ded7e574 (patch) | |
| tree | 57d28c125dde7358bc5edf0e375d048140d498b3 /src | |
| parent | f8825fa1d708c644997ad01c1a8dfaedc787727b (diff) | |
| download | NiGui-b0efefc389e7666b3119f15781c403c0ded7e574.tar.gz NiGui-b0efefc389e7666b3119f15781c403c0ded7e574.zip | |
Fix: Clear down keys when window focus is lost
Diffstat (limited to 'src')
| -rwxr-xr-x | src/nigui.nim | 3 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/gtk3.nim | 6 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/platform_impl.nim | 4 | ||||
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 9 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 1 |
5 files changed, 19 insertions, 4 deletions
diff --git a/src/nigui.nim b/src/nigui.nim index 6667719..11a318d 100755 --- a/src/nigui.nim +++ b/src/nigui.nim @@ -1062,6 +1062,9 @@ proc internalKeyUp(key: Key) = if i != -1: fDownKeys.delete(i) +proc internalAllKeysUp() = + fDownKeys = @[] + # ---------------------------------------------------------------------------------------- # Canvas diff --git a/src/nigui/private/gtk3/gtk3.nim b/src/nigui/private/gtk3/gtk3.nim index 1edf03c..156f98c 100755 --- a/src/nigui/private/gtk3/gtk3.nim +++ b/src/nigui/private/gtk3/gtk3.nim @@ -81,6 +81,12 @@ type changed_mask*: cint new_window_state*: cint + GdkEventFocus* {.byCopy.} = object + event_type*: cint + window*: pointer + send_event*: int8 + `in`*: int16 + GtkTextIter* {.byCopy.} = object dummy1: pointer dummy2: pointer diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim index 52315f1..6fb5bb5 100755 --- a/src/nigui/private/gtk3/platform_impl.nim +++ b/src/nigui/private/gtk3/platform_impl.nim @@ -616,6 +616,9 @@ proc pWindowStateEventSignal(widget: pointer, event: var GdkEventWindowState, us let window = cast[WindowImpl](user_data) window.fMinimized = (event.new_window_state and GDK_WINDOW_STATE_ICONIFIED) == GDK_WINDOW_STATE_ICONIFIED +proc pWindowFocusOutEventSignal(widget: pointer, event: var GdkEventFocus, user_data: pointer): bool {.cdecl.} = + internalAllKeysUp() + proc init(window: WindowImpl) = if pClipboardPtr == nil: gtk_init(nil, nil) @@ -630,6 +633,7 @@ proc init(window: WindowImpl) = discard g_signal_connect_data(window.fHandle, "key-press-event", pWindowKeyPressSignal, cast[pointer](window)) discard g_signal_connect_data(window.fHandle, "key-release-event", pWindowKeyReleaseSignal, cast[pointer](window)) discard g_signal_connect_data(window.fHandle, "window-state-event", pWindowStateEventSignal, cast[pointer](window)) + discard g_signal_connect_data(window.fHandle, "focus-out-event", pWindowFocusOutEventSignal, cast[pointer](window)) # Enable drag and drop of files: pSetDragDest(window.fHandle) diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim index 24d5c8c..f95d92c 100755 --- a/src/nigui/private/windows/platform_impl.nim +++ b/src/nigui/private/windows/platform_impl.nim @@ -333,6 +333,8 @@ proc pWindowWndProc(hWnd: pointer, uMsg: int32, wParam, lParam: pointer): pointe discard #echo "window WM_SETFOCUS" # not called? + of WM_KILLFOCUS: + internalAllKeysUp() of WM_DROPFILES: let window = cast[WindowImpl](pGetWindowLongPtr(hWnd, GWLP_USERDATA)) var files: seq[string] = @[] @@ -1076,14 +1078,13 @@ proc pCommonControlWndProc(hWnd: pointer, uMsg: int32, wParam, lParam: pointer): of WM_KEYUP: internalKeyUp(pWMParamsToKey(wParam, lParam)) + # of WM_KEYUP: + # return nil # key is still inserted in text area + of WM_CHAR: let control = cast[Control](pGetWindowLongPtr(hWnd, GWLP_USERDATA)) if control != nil and pHandleWMCHAR(control.parentWindow, control, wParam, lParam): return PWndProcResult_False - - # of WM_KEYUP: - # return nil # key is still inserted in text area - of WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN: let control = cast[Control](pGetWindowLongPtr(hWnd, GWLP_USERDATA)) if control != nil: diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim index 3bf3515..902b39b 100755 --- a/src/nigui/private/windows/windows.nim +++ b/src/nigui/private/windows/windows.nim @@ -133,6 +133,7 @@ const WM_RBUTTONDOWN* = 0x0204 WM_RBUTTONUP* = 0x0205 WM_SETFOCUS* = 0x0007 + WM_KILLFOCUS* = 0x0008 WM_SETFONT* = 48 WM_SIZE* = 5 WM_VSCROLL* = 277 |
