10
10
import org .cryptomator .integrations .tray .TrayMenuController ;
11
11
import org .cryptomator .integrations .tray .TrayMenuException ;
12
12
import org .cryptomator .integrations .tray .TrayMenuItem ;
13
+ import org .purejava .appindicator .GCallback ;
13
14
import org .purejava .appindicator .MemoryAllocator ;
14
15
import org .slf4j .Logger ;
15
16
import org .slf4j .LoggerFactory ;
16
17
18
+ import java .lang .foreign .Arena ;
17
19
import java .lang .foreign .MemorySegment ;
18
20
import java .lang .foreign .SegmentScope ;
19
21
import java .util .List ;
@@ -46,9 +48,11 @@ public void showTrayIcon(Consumer<TrayIconLoader> iconLoader, Runnable runnable,
46
48
}
47
49
48
50
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
+ }
52
56
}
53
57
54
58
@ Override
@@ -58,7 +62,9 @@ public void updateTrayIcon(Consumer<TrayIconLoader> iconLoader) {
58
62
}
59
63
60
64
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
+ }
62
68
}
63
69
64
70
@ Override
@@ -79,12 +85,14 @@ private void addChildren(MemorySegment menu, List<TrayMenuItem> items) {
79
85
switch (item ) {
80
86
case ActionItem a -> {
81
87
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
+ }
88
96
gtk_menu_shell_append (menu , gtkMenuItem );
89
97
}
90
98
case SeparatorItem separatorItem -> {
@@ -94,7 +102,9 @@ private void addChildren(MemorySegment menu, List<TrayMenuItem> items) {
94
102
case SubMenuItem s -> {
95
103
var gtkMenuItem = gtk_menu_item_new ();
96
104
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
+ }
98
108
addChildren (gtkSubmenu , s .items ());
99
109
gtk_menu_item_set_submenu (gtkMenuItem , gtkSubmenu );
100
110
gtk_menu_shell_append (menu , gtkMenuItem );
0 commit comments