summaryrefslogtreecommitdiff
path: root/src/nigui/private
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2019-12-26 15:21:18 +0100
committertrustable-code <krauter.simon@arcor.de>2019-12-26 15:21:18 +0100
commit5bfc8dafab21e292723d19115aad0f304252959a (patch)
treedca257e5a7ccb63f4e644c766eaf6575bb34bd26 /src/nigui/private
parentedcdbe648f2b795905832228b08df506fcd31847 (diff)
downloadNiGui-5bfc8dafab21e292723d19115aad0f304252959a.tar.gz
NiGui-5bfc8dafab21e292723d19115aad0f304252959a.zip
Implement "always on top", fixes #80
Diffstat (limited to 'src/nigui/private')
-rwxr-xr-xsrc/nigui/private/gtk3/gtk3.nim1
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim4
-rwxr-xr-xsrc/nigui/private/windows/platform_impl.nim11
-rwxr-xr-xsrc/nigui/private/windows/windows.nim2
4 files changed, 16 insertions, 2 deletions
diff --git a/src/nigui/private/gtk3/gtk3.nim b/src/nigui/private/gtk3/gtk3.nim
index 2f0e399..3627396 100755
--- a/src/nigui/private/gtk3/gtk3.nim
+++ b/src/nigui/private/gtk3/gtk3.nim
@@ -259,6 +259,7 @@ proc gtk_window_set_icon_from_file*(window: pointer, filename: cstring, err: poi
proc gtk_window_iconify*(window: pointer) {.importc, libgtk3.}
proc gtk_window_deiconify*(window: pointer) {.importc, libgtk3.}
proc gtk_window_present*(window: pointer) {.importc, libgtk3.}
+proc gtk_window_set_keep_above*(window: pointer, setting: bool) {.importc, libgtk3.}
proc gdk_window_begin_paint_rect*(window: pointer, rectangle: var GdkRectangle) {.importc, libgtk3.}
proc gdk_window_begin_paint_region*(window: pointer, region: pointer) {.importc, libgtk3.}
diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim
index 3f6faa6..28f67f8 100755
--- a/src/nigui/private/gtk3/platform_impl.nim
+++ b/src/nigui/private/gtk3/platform_impl.nim
@@ -842,6 +842,10 @@ method minimize(window: WindowImpl) =
procCall window.Window.minimize()
gtk_window_iconify(window.fHandle)
+method `alwaysOnTop=`(window: WindowImpl, alwaysOnTop: bool) =
+ procCall window.Window.`alwaysOnTop=`(alwaysOnTop)
+ gtk_window_set_keep_above(window.fHandle, alwaysOnTop)
+
method `width=`*(window: WindowImpl, width: int) =
procCall window.Window.`width=`(width)
gtk_window_resize(window.fHandle, window.width.cint, window.height.cint)
diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim
index ab214b4..4fd2950 100755
--- a/src/nigui/private/windows/platform_impl.nim
+++ b/src/nigui/private/windows/platform_impl.nim
@@ -112,8 +112,8 @@ proc pGetWindowText(hWnd: pointer): string =
if res != characters: pRaiseLastOSError()
result = result.pUtf16ToUtf8
-proc pSetWindowPos(wnd: pointer, x, y, cx, cy: int, uFlags: int32 = 0) =
- var result = SetWindowPos(wnd, nil, x.int32, y.int32, cx.int32, cy.int32, uFlags)
+proc pSetWindowPos(wnd: pointer, x, y, cx, cy: int, uFlags: int32 = 0, hWndInsertAfter = 0) =
+ var result = SetWindowPos(wnd, cast[pointer](hWndInsertAfter), x.int32, y.int32, cx.int32, cy.int32, uFlags)
if not result: pRaiseLastOSError()
proc pGetClientRect(wnd: pointer): Rect =
@@ -877,6 +877,13 @@ method minimize(window: WindowImpl) =
procCall window.Window.minimize()
pShowWindow(window.fHandle, SW_MINIMIZE)
+method `alwaysOnTop=`(window: WindowImpl, alwaysOnTop: bool) =
+ procCall window.Window.`alwaysOnTop=`(alwaysOnTop)
+ if alwaysOnTop:
+ pSetWindowPos(window.fHandle, -1, -1, -1, -1, SWP_NOSIZE or SWP_NOMOVE, HWND_TOPMOST)
+ else:
+ pSetWindowPos(window.fHandle, -1, -1, -1, -1, SWP_NOSIZE or SWP_NOMOVE, HWND_NOTOPMOST)
+
proc pUpdatePosition(window: WindowImpl) =
pSetWindowPos(window.fHandle, window.x, window.y, -1, -1, SWP_NOSIZE)
# discard MoveWindow(window.fHandle, window.x.int32, window.y.int32, window.width.int32, window.height.int32, false)
diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim
index dab2d2d..349afaa 100755
--- a/src/nigui/private/windows/windows.nim
+++ b/src/nigui/private/windows/windows.nim
@@ -68,6 +68,8 @@ const
GWL_STYLE* = -16
GWLP_USERDATA* = -21
GWLP_WNDPROC* = -4
+ HWND_TOPMOST* = -1
+ HWND_NOTOPMOST* = -2
ICON_SMALL* = 0
ICON_BIG* = 1
IDC_ARROW* = 32512