@@ -96,6 +96,15 @@ public class Menu: MenuShell {
9696 widgetPointer = gtk_menu_new_from_model ( model)
9797 }
9898
99+ public func bindModel( _ model: GMenu ) {
100+ gtk_menu_shell_bind_model (
101+ castedPointer ( ) ,
102+ UnsafeMutablePointer ( model. pointer) ,
103+ nil ,
104+ false . toGBoolean ( )
105+ )
106+ }
107+
99108 public func popUpAtWidget( _ widget: Widget , relativePosition: SIMD2 < Int > ) {
100109 setProperty ( named: " rect-anchor-dx " , newValue: relativePosition. x)
101110 setProperty ( named: " rect-anchor-dy " , newValue: relativePosition. y)
@@ -119,60 +128,6 @@ public class Menu: MenuShell {
119128 registerSignalHandlers ( )
120129 }
121130
122- private class Action {
123- var run : ( ) -> Void
124-
125- init ( _ action: @escaping ( ) -> Void ) {
126- run = action
127- }
128- }
129-
130- public func populate( items: [ ( String , ( ) -> Void ) ] ) {
131- let handler :
132- @convention ( c) ( UnsafeMutableRawPointer , OpaquePointer , UnsafeMutableRawPointer ) -> Void =
133- { _, _, data in
134- let action = Unmanaged < Action > . fromOpaque ( data) . takeUnretainedValue ( )
135- action. run ( )
136- }
137-
138- let model = g_menu_new ( )
139- let actionGroup = g_simple_action_group_new ( )
140- for (i, ( label, action) ) in items. enumerated ( ) {
141- g_menu_append ( model, label, " menu.action \( i) " )
142-
143- let action = Action ( action)
144- let actionName = " action \( i) "
145- let simpleAction = g_simple_action_new ( actionName, nil )
146-
147- g_simple_action_set_enabled ( simpleAction, true . toGBoolean ( ) )
148-
149- g_signal_connect_data (
150- simpleAction. map ( UnsafeMutableRawPointer . init) ,
151- " activate " ,
152- gCallback ( handler) ,
153- Unmanaged < Action > . passRetained ( action) . toOpaque ( ) ,
154- { data, _ in
155- Unmanaged < Action > . fromOpaque ( data!) . release ( )
156- } ,
157- G_CONNECT_AFTER
158- )
159-
160- g_action_map_add_action (
161- actionGroup. map ( OpaquePointer . init) ,
162- simpleAction
163- )
164- }
165-
166- gtk_menu_shell_bind_model (
167- castedPointer ( ) ,
168- UnsafeMutablePointer < _GMenuModel > ( model) ,
169- nil ,
170- false . toGBoolean ( )
171- )
172-
173- gtk_widget_insert_action_group ( widgetPointer, " menu " , actionGroup. map ( OpaquePointer . init) )
174- }
175-
176131 private func registerSignalHandlers( ) {
177132 addSignal ( name: " hide " ) { [ weak self] in
178133 guard let self = self else { return }
0 commit comments