aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoesis2018-10-19 17:59:39 -0700
committerGitHub2018-10-19 17:59:39 -0700
commita10eb7e349f34fea123d7b3f091dd84269a09e00 (patch)
treec707d9c8ac00a5c34cb4c325651a942b77e5c125
parent99cf6a5c182815c5fec856856f897d9c6f1018ab (diff)
parentac73430500283a19a3602cc33eb49a440e38554b (diff)
downloadsystray-a10eb7e349f34fea123d7b3f091dd84269a09e00.tar.bz2
Merge pull request #68 from kalikaneko/bug/fix-broken-menuitem-show
Bug/fix broken menuitem show
-rw-r--r--systray_windows.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/systray_windows.go b/systray_windows.go
index 7a9d7a1..040cdbd 100644
--- a/systray_windows.go
+++ b/systray_windows.go
@@ -8,6 +8,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
+ "syscall"
"unsafe"
"golang.org/x/sys/windows"
@@ -463,8 +464,10 @@ func (t *winTray) addOrUpdateMenuItem(menuId int32, title string, disabled, chec
// The return value is the identifier of the specified menu item.
// If the menu item identifier is NULL or if the specified item opens a submenu, the return value is -1.
+ // If the given menu identifier is not found (becase we deleted the menu item when hiding it),
+ // the call will return the next integer that is available as an existing menu item.
res, _, err := pGetMenuItemID.Call(uintptr(t.menu), uintptr(menuId))
- if int32(res) == -1 {
+ if int32(res) == -1 || int32(res) != menuId {
res, _, err = pInsertMenuItem.Call(
uintptr(t.menu),
uintptr(menuId),
@@ -522,6 +525,7 @@ func (t *winTray) addSeparatorMenuItem(menuId int32) error {
func (t *winTray) hideMenuItem(menuId int32) error {
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms647629(v=vs.85).aspx
const MF_BYCOMMAND = 0x00000000
+ const ERROR_SUCCESS = 0
res, _, err := pDeleteMenu.Call(
uintptr(t.menu),
@@ -529,6 +533,9 @@ func (t *winTray) hideMenuItem(menuId int32) error {
MF_BYCOMMAND,
)
if res == 0 {
+ if int(err.(syscall.Errno)) == ERROR_SUCCESS {
+ return nil
+ }
return err
}