@@ -90,66 +90,20 @@ open class Window: Widget {
9090 }
9191
9292 public func setEscapeKeyPressedHandler( to handler: ( ( ) -> Void ) ? ) {
93- let handler = EventControllerKey ( )
94- handler. keyPressed = { [ weak self] _, keyval, _, _ in
95- guard keyval == GDK_KEY_Escape else { return }
96- self ? . escapeKeyPressed ? ( )
97- }
98- /*if let data = escapeKeyHandlerData {
99- Unmanaged<ValueBox<() -> Void>>.fromOpaque(data).release()
100- escapeKeyHandlerData = nil
101- }
102-
103- if let oldController = escapeKeyEventController {
104- gtk_widget_remove_controller(widgetPointer, oldController)
105- escapeKeyEventController = nil
106- }
107-
10893 escapeKeyPressed = handler
10994
110- guard handler != nil else { return }
111-
112- let keyEventController = gtk_event_controller_key_new()
113- gtk_event_controller_set_propagation_phase(keyEventController, GTK_PHASE_BUBBLE)
95+ guard escapeKeyEventController == nil else { return }
11496
115- let thunk:
116- @convention(c) (
117- UnsafeMutableRawPointer?, guint, guint, GdkModifierType, gpointer?
118- ) -> gboolean = { _, keyval, _, _, userData in
119- if keyval == GDK_KEY_Escape {
120- guard let userData else { return 1 }
121- let box = Unmanaged<ValueBox<() -> Void>>.fromOpaque(userData)
122- .takeUnretainedValue()
123- box.value()
124- return 1
125- }
126- return 0
127- }
128-
129- let boxedHandler = Unmanaged.passRetained(
130- ValueBox(value: handler!)
131- ).toOpaque()
132-
133- g_signal_connect_data(
134- UnsafeMutableRawPointer(keyEventController),
135- "key-pressed",
136- unsafeBitCast(thunk, to: GCallback.self),
137- boxedHandler,
138- { data, _ in
139- if let data {
140- Unmanaged<ValueBox<() -> Void>>.fromOpaque(data).release()
141- }
142- },
143- .init(0)
144- )
145-
146- gtk_widget_add_controller(widgetPointer, keyEventController)
97+ let keyEventController = EventControllerKey ( )
98+ keyEventController. keyPressed = { [ weak self] _, keyval, _, _ in
99+ guard keyval == GDK_KEY_Escape else { return }
100+ self ? . escapeKeyPressed ? ( )
101+ }
147102 escapeKeyEventController = keyEventController
148- escapeKeyHandlerData = boxedHandler*/
103+ addEventController ( keyEventController )
149104 }
150105
151- private var escapeKeyEventController : OpaquePointer ?
152- private var escapeKeyHandlerData : UnsafeMutableRawPointer ?
106+ private var escapeKeyEventController : EventControllerKey ?
153107
154108 public var onCloseRequest : ( ( Window ) -> Void ) ?
155109 public var escapeKeyPressed : ( ( ) -> Void ) ?
0 commit comments