aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoesis2018-10-17 03:05:42 -0700
committerGitHub2018-10-17 03:05:42 -0700
commit89b3d9c45cc69f861868cc7f3159eba2b4cdfb22 (patch)
treed44d0e0f1eaba23282d2f15f602aba0941cd33b9
parent3fd1443dac5c8297999189fe28d5836b2b075b66 (diff)
parent1a665b2c73c12a4cdf5402daef46b1082a822e0d (diff)
downloadsystray-89b3d9c45cc69f861868cc7f3159eba2b4cdfb22.tar.bz2
Merge pull request #65 from jefvel/menu-item-icons
Made it possible to add icons to menu items on Mac
-rw-r--r--README.md3
-rw-r--r--example/main.go4
-rw-r--r--systray.h1
-rw-r--r--systray_darwin.m22
-rw-r--r--systray_linux.c3
-rw-r--r--systray_nonwindows.go7
-rw-r--r--systray_windows.go5
7 files changed, 45 insertions, 0 deletions
diff --git a/README.md b/README.md
index 5a24b66..626c132 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,9 @@ func onReady() {
systray.SetTitle("Awesome App")
systray.SetTooltip("Pretty awesome超级棒")
mQuit := systray.AddMenuItem("Quit", "Quit the whole app")
+
+ // Sets the icon of a menu item. Only available on Mac.
+ mQuit.SetIcon(icon.Data)
}
func onExit() {
diff --git a/example/main.go b/example/main.go
index f889b3c..5542b89 100644
--- a/example/main.go
+++ b/example/main.go
@@ -44,6 +44,10 @@ func onReady() {
systray.AddMenuItem("Ignored", "Ignored")
mUrl := systray.AddMenuItem("Open Lantern.org", "my home")
mQuit := systray.AddMenuItem("退出", "Quit the whole app")
+
+ // Sets the icon of a menu item. Only available on Mac.
+ mQuit.SetIcon(icon.Data)
+
systray.AddSeparator()
mToggle := systray.AddMenuItem("Toggle", "Toggle the Quit button")
shown := true
diff --git a/systray.h b/systray.h
index f9b1d3c..36bcf98 100644
--- a/systray.h
+++ b/systray.h
@@ -4,6 +4,7 @@ extern void systray_menu_item_selected(int menu_id);
int nativeLoop(void);
void setIcon(const char* iconBytes, int length);
+void setMenuItemIcon(const char* iconBytes, int length, int menuId);
void setTitle(char* title);
void setTooltip(char* tooltip);
void add_or_update_menu_item(int menuId, char* title, char* tooltip, short disabled, short checked);
diff --git a/systray_darwin.m b/systray_darwin.m
index f1dc7ac..a489bc4 100644
--- a/systray_darwin.m
+++ b/systray_darwin.m
@@ -124,6 +124,19 @@
[menuItem setHidden:TRUE];
}
+- (void)setMenuItemIcon:(NSArray*)imageAndMenuId {
+ NSImage* image = [imageAndMenuId objectAtIndex:0];
+ NSNumber* menuId = [imageAndMenuId objectAtIndex:1];
+
+ NSMenuItem* menuItem;
+ int existedMenuIndex = [menu indexOfItemWithRepresentedObject: menuId];
+ if (existedMenuIndex == -1) {
+ return;
+ }
+ menuItem = [menu itemAtIndex: existedMenuIndex];
+ menuItem.image = image;
+}
+
- (void) show_menu_item:(NSNumber*) menuId
{
NSMenuItem* menuItem;
@@ -163,6 +176,15 @@ void setIcon(const char* iconBytes, int length) {
runInMainThread(@selector(setIcon:), (id)image);
}
+void setMenuItemIcon(const char* iconBytes, int length, int menuId) {
+ NSData* buffer = [NSData dataWithBytes: iconBytes length:length];
+ NSImage *image = [[NSImage alloc] initWithData:buffer];
+ [image setSize:NSMakeSize(16, 16)];
+
+ NSNumber *mId = [NSNumber numberWithInt:menuId];
+ runInMainThread(@selector(setMenuItemIcon:), @[image, (id)mId]);
+}
+
void setTitle(char* ctitle) {
NSString* title = [[NSString alloc] initWithCString:ctitle
encoding:NSUTF8StringEncoding];
diff --git a/systray_linux.c b/systray_linux.c
index b56005b..a34c267 100644
--- a/systray_linux.c
+++ b/systray_linux.c
@@ -177,6 +177,9 @@ void setTooltip(char* ctooltip) {
free(ctooltip);
}
+void setMenuItemIcon(const char* iconBytes, int length, int menuId) {
+}
+
void add_or_update_menu_item(int menu_id, char* title, char* tooltip, short disabled, short checked) {
MenuItemInfo *mii = malloc(sizeof(MenuItemInfo));
mii->menu_id = menu_id;
diff --git a/systray_nonwindows.go b/systray_nonwindows.go
index 0ed03b4..4868b55 100644
--- a/systray_nonwindows.go
+++ b/systray_nonwindows.go
@@ -60,6 +60,13 @@ func addOrUpdateMenuItem(item *MenuItem) {
)
}
+// SetIcon sets the icon of a menu item. Only available on Mac.
+// iconBytes should be the content of .ico/.jpg/.png
+func (item *MenuItem) SetIcon(iconBytes []byte) {
+ cstr := (*C.char)(unsafe.Pointer(&iconBytes[0]))
+ C.setMenuItemIcon(cstr, (C.int)(len(iconBytes)), C.int(item.id))
+}
+
func addSeparator(id int32) {
C.add_separator(C.int(id))
}
diff --git a/systray_windows.go b/systray_windows.go
index 68e20cf..7a9d7a1 100644
--- a/systray_windows.go
+++ b/systray_windows.go
@@ -647,6 +647,11 @@ func SetTitle(title string) {
// do nothing
}
+// SetIcon sets the icon of a menu item. Only available on Mac.
+func (item *MenuItem) SetIcon(iconBytes []byte) {
+ // do nothing
+}
+
// SetTooltip sets the systray tooltip to display on mouse hover of the tray icon,
// only available on Mac and Windows.
func SetTooltip(tooltip string) {