Notifications (windows).

This commit is contained in:
Nuno Cruces 2020-01-27 13:44:47 +00:00
parent bcfacfe62f
commit 7b7d915e3a
2 changed files with 62 additions and 7 deletions

View file

@ -38,9 +38,9 @@ func selectColor(options []Option) (color.Color, error) {
args.RgbResult = uint32(n.R) | (uint32(n.G) << 8) | (uint32(n.B) << 16) args.RgbResult = uint32(n.R) | (uint32(n.G) << 8) | (uint32(n.B) << 16)
} }
if opts.showPalette { if opts.showPalette {
args.Flags |= 4 // CC_PREVENTFULLOPEN args.Flags |= 0x4 // CC_PREVENTFULLOPEN
} else { } else {
args.Flags |= 2 // CC_FULLOPEN args.Flags |= 0x2 // CC_FULLOPEN
} }
runtime.LockOSThread() runtime.LockOSThread()
@ -55,16 +55,15 @@ func selectColor(options []Option) (color.Color, error) {
} }
n, _, _ := chooseColor.Call(uintptr(unsafe.Pointer(&args))) n, _, _ := chooseColor.Call(uintptr(unsafe.Pointer(&args)))
if n == 0 {
return nil, commDlgError()
}
// save custom colors back // save custom colors back
colorsMutex.Lock() colorsMutex.Lock()
savedColors = customColors savedColors = customColors
colorsMutex.Unlock() colorsMutex.Unlock()
if n == 0 {
return nil, commDlgError()
}
r := uint8(args.RgbResult >> 0) r := uint8(args.RgbResult >> 0)
g := uint8(args.RgbResult >> 8) g := uint8(args.RgbResult >> 8)
b := uint8(args.RgbResult >> 16) b := uint8(args.RgbResult >> 16)

View file

@ -1,5 +1,61 @@
package zenity package zenity
import (
"syscall"
"unsafe"
)
var (
shellNotifyIcon = shell32.NewProc("Shell_NotifyIconW")
)
func notify(text string, options []Option) error { func notify(text string, options []Option) error {
panic("not implemented") opts := applyOptions(options)
var args _NOTIFYICONDATA
args.StructSize = uint32(unsafe.Sizeof(args))
args.ID = 0x378eb49c // random
args.Flags = 0x00000010 // NIF_INFO
args.State = 0x00000001 // NIS_HIDDEN
info := syscall.StringToUTF16(text)
copy(args.Info[:len(args.Info)-1], info)
title := syscall.StringToUTF16(opts.title)
copy(args.InfoTitle[:len(args.InfoTitle)-1], title)
switch opts.icon {
case InfoIcon:
args.InfoFlags |= 0x1 // NIIF_INFO
case WarningIcon:
args.InfoFlags |= 0x2 // NIIF_WARNING
case ErrorIcon:
args.InfoFlags |= 0x3 // NIIF_ERROR
}
n, _, err := shellNotifyIcon.Call(0 /* NIM_ADD */, uintptr(unsafe.Pointer(&args)))
if n == 0 {
return err
}
shellNotifyIcon.Call(2 /* NIM_DELETE */, uintptr(unsafe.Pointer(&args)))
return nil
}
type _NOTIFYICONDATA struct {
StructSize uint32
Owner uintptr
ID uint32
Flags uint32
CallbackMessage uint32
Icon uintptr
Tip [128]uint16
State uint32
StateMask uint32
Info [256]uint16
Version uint32
InfoTitle [64]uint16
InfoFlags uint32
// GuidItem [16]byte
// BalloonIcon uintptr
} }