summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2018-05-11 18:18:12 +0200
committertrustable-code <krauter.simon@arcor.de>2018-05-11 18:18:12 +0200
commitb0efefc389e7666b3119f15781c403c0ded7e574 (patch)
tree57d28c125dde7358bc5edf0e375d048140d498b3 /src
parentf8825fa1d708c644997ad01c1a8dfaedc787727b (diff)
downloadNiGui-b0efefc389e7666b3119f15781c403c0ded7e574.tar.gz
NiGui-b0efefc389e7666b3119f15781c403c0ded7e574.zip
Fix: Clear down keys when window focus is lost
Diffstat (limited to 'src')
-rwxr-xr-xsrc/nigui.nim3
-rwxr-xr-xsrc/nigui/private/gtk3/gtk3.nim6
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim4
-rwxr-xr-xsrc/nigui/private/windows/platform_impl.nim9
-rwxr-xr-xsrc/nigui/private/windows/windows.nim1
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