summaryrefslogtreecommitdiff
path: root/dialog_windows.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-06-04 23:28:43 -0400
committerPietro Gagliardi <[email protected]>2014-06-04 23:28:43 -0400
commit7acc70c39e500cbbe087e09c6a77205981e838ef (patch)
treedf3206b5bc56d372b70408da6a72d41f9a245ebd /dialog_windows.go
parent4e6f6cd1472e1de2c76dbe1ca736be5f911ce846 (diff)
Implemented the new MsgBox() transience on Windows.
Diffstat (limited to 'dialog_windows.go')
-rw-r--r--dialog_windows.go20
1 files changed, 13 insertions, 7 deletions
diff --git a/dialog_windows.go b/dialog_windows.go
index 91507d3..dec06ae 100644
--- a/dialog_windows.go
+++ b/dialog_windows.go
@@ -13,21 +13,27 @@ var (
_messageBox = user32.NewProc("MessageBoxW")
)
-func _msgBox(primarytext string, secondarytext string, uType uint32) (result int) {
+func _msgBox(parent *Window, primarytext string, secondarytext string, uType uint32) (result int) {
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa511267.aspx says "Use task dialogs whenever appropriate to achieve a consistent look and layout. Task dialogs require Windows Vista® or later, so they aren't suitable for earlier versions of Windows. If you must use a message box, separate the main instruction from the supplemental instruction with two line breaks."
text := primarytext
if secondarytext != "" {
text += "\n\n" + secondarytext
}
- uType |= _MB_TASKMODAL // make modal to every window in the program (they're all windows of the uitask, which is a single thread)
ptext := toUTF16(text)
ptitle := toUTF16(os.Args[0])
ret := make(chan uiret)
defer close(ret)
+ parenthwnd := _HWND(_NULL)
+ if parent != nil {
+ parenthwnd = parent.sysData.hwnd
+ uType |= _MB_APPLMODAL // only for this window
+ } else {
+ uType |= _MB_TASKMODAL // make modal to every window in the program (they're all windows of the uitask, which is a single thread)
+ }
uitask <- &uimsg{
call: _messageBox,
p: []uintptr{
- uintptr(_NULL),
+ uintptr(parenthwnd),
utf16ToArg(ptext),
utf16ToArg(ptitle),
uintptr(uType),
@@ -41,10 +47,10 @@ func _msgBox(primarytext string, secondarytext string, uType uint32) (result int
return int(r.ret)
}
-func msgBox(primarytext string, secondarytext string) {
- _msgBox(primarytext, secondarytext, _MB_OK)
+func msgBox(parent *Window, primarytext string, secondarytext string) {
+ _msgBox(parent, primarytext, secondarytext, _MB_OK)
}
-func msgBoxError(primarytext string, secondarytext string) {
- _msgBox(primarytext, secondarytext, _MB_OK | _MB_ICONERROR)
+func msgBoxError(parent *Window, primarytext string, secondarytext string) {
+ _msgBox(parent, primarytext, secondarytext, _MB_OK | _MB_ICONERROR)
}