summaryrefslogtreecommitdiff
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
parent4e6f6cd1472e1de2c76dbe1ca736be5f911ce846 (diff)
Implemented the new MsgBox() transience on Windows.
-rw-r--r--dialog_windows.go20
-rw-r--r--zconstants_windows_386.go1
-rw-r--r--zconstants_windows_amd64.go1
3 files changed, 15 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)
}
diff --git a/zconstants_windows_386.go b/zconstants_windows_386.go
index 677a45e..6e06392 100644
--- a/zconstants_windows_386.go
+++ b/zconstants_windows_386.go
@@ -48,6 +48,7 @@ const _LB_GETTEXTLEN = 394
const _LB_INSERTSTRING = 385
const _LF_FACESIZE = 32
const _MA_ACTIVATE = 1
+const _MB_APPLMODAL = 0
const _MB_ICONERROR = 16
const _MB_OK = 0
const _MB_TASKMODAL = 8192
diff --git a/zconstants_windows_amd64.go b/zconstants_windows_amd64.go
index 8ba09be..9bcb36d 100644
--- a/zconstants_windows_amd64.go
+++ b/zconstants_windows_amd64.go
@@ -48,6 +48,7 @@ const _LB_GETTEXTLEN = 394
const _LB_INSERTSTRING = 385
const _LF_FACESIZE = 32
const _MA_ACTIVATE = 1
+const _MB_APPLMODAL = 0
const _MB_ICONERROR = 16
const _MB_OK = 0
const _MB_TASKMODAL = 8192