1010import org .cryptomator .integrations .tray .TrayMenuController ;
1111import org .cryptomator .integrations .tray .TrayMenuException ;
1212import org .cryptomator .integrations .tray .TrayMenuItem ;
13+ import org .purejava .appindicator .GCallback ;
1314import org .purejava .appindicator .MemoryAllocator ;
1415import org .slf4j .Logger ;
1516import org .slf4j .LoggerFactory ;
1617
18+ import java .lang .foreign .Arena ;
1719import java .lang .foreign .MemorySegment ;
1820import java .lang .foreign .SegmentScope ;
1921import 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