diff options
Diffstat (limited to 'src/nigui/private')
| -rwxr-xr-x | src/nigui/private/gtk3/gtk3.nim | 1 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/platform_impl.nim | 4 | ||||
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 11 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 2 |
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 |
