Skip to content

Commit 16e7465

Browse files
committed
Code improvements final steps
Discussion: #18
1 parent ae314ff commit 16e7465

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import org.cryptomator.integrations.tray.TrayMenuController;
1111
import org.cryptomator.integrations.tray.TrayMenuException;
1212
import org.cryptomator.integrations.tray.TrayMenuItem;
13+
import org.purejava.appindicator.GCallback;
1314
import org.purejava.appindicator.MemoryAllocator;
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
1617

18+
import java.lang.foreign.Arena;
1719
import java.lang.foreign.MemorySegment;
1820
import java.lang.foreign.SegmentScope;
1921
import java.util.List;
@@ -46,9 +48,11 @@ public void showTrayIcon(Consumer<TrayIconLoader> iconLoader, Runnable runnable,
4648
}
4749

4850
private void showTrayIconWithSVG(String s) {
49-
indicator = app_indicator_new(MemoryAllocator.ALLOCATE_FOR("org.cryptomator.Cryptomator"),
50-
MemoryAllocator.ALLOCATE_FOR(s),
51-
APP_INDICATOR_CATEGORY_APPLICATION_STATUS());
51+
try (var arena = Arena.openConfined()) {
52+
indicator = app_indicator_new(arena.allocateUtf8String("org.cryptomator.Cryptomator"),
53+
arena.allocateUtf8String(s),
54+
APP_INDICATOR_CATEGORY_APPLICATION_STATUS());
55+
}
5256
}
5357

5458
@Override
@@ -58,7 +62,9 @@ public void updateTrayIcon(Consumer<TrayIconLoader> iconLoader) {
5862
}
5963

6064
private void updateTrayIconWithSVG(String s) {
61-
app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(s));
65+
try (var arena = Arena.openConfined()) {
66+
app_indicator_set_icon(indicator, arena.allocateUtf8String(s));
67+
}
6268
}
6369

6470
@Override
@@ -79,12 +85,14 @@ private void addChildren(MemorySegment menu, List<TrayMenuItem> items) {
7985
switch (item) {
8086
case ActionItem a -> {
8187
var gtkMenuItem = gtk_menu_item_new();
82-
gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title()));
83-
g_signal_connect_object(gtkMenuItem,
84-
MemoryAllocator.ALLOCATE_FOR("activate"),
85-
MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), SCOPE),
86-
menu,
87-
0);
88+
try (var arena = Arena.openConfined()) {
89+
gtk_menu_item_set_label(gtkMenuItem, arena.allocateUtf8String(a.title()));
90+
g_signal_connect_object(gtkMenuItem,
91+
arena.allocateUtf8String("activate"),
92+
GCallback.allocate(new ActionItemCallback(a), SCOPE),
93+
menu,
94+
0);
95+
}
8896
gtk_menu_shell_append(menu, gtkMenuItem);
8997
}
9098
case SeparatorItem separatorItem -> {
@@ -94,7 +102,9 @@ private void addChildren(MemorySegment menu, List<TrayMenuItem> items) {
94102
case SubMenuItem s -> {
95103
var gtkMenuItem = gtk_menu_item_new();
96104
var gtkSubmenu = gtk_menu_new();
97-
gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(s.title()));
105+
try (var arena = Arena.openConfined()) {
106+
gtk_menu_item_set_label(gtkMenuItem, arena.allocateUtf8String(s.title()));
107+
}
98108
addChildren(gtkSubmenu, s.items());
99109
gtk_menu_item_set_submenu(gtkMenuItem, gtkSubmenu);
100110
gtk_menu_shell_append(menu, gtkMenuItem);

0 commit comments

Comments
 (0)