Skip to content

Commit f7750d7

Browse files
committed
Replaced Window Escape key press c interop with generated class
1 parent 6c013b7 commit f7750d7

File tree

2 files changed

+11
-58
lines changed

2 files changed

+11
-58
lines changed

Sources/Gtk/Widgets/Window.swift

Lines changed: 8 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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)?

Sources/GtkBackend/GtkBackend.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,21 +1611,20 @@ public final class GtkBackend: AppBackend {
16111611

16121612
if connectedCloseHandlers.insert(key).inserted {
16131613
sheet.onCloseRequest = { [weak self] _ in
1614-
if ctx.interactiveDismissDisabled { return 1 }
1614+
if ctx.interactiveDismissDisabled { return }
16151615

16161616
if ctx.isProgrammaticDismiss {
16171617
ctx.isProgrammaticDismiss = false
1618-
return 1
1618+
return
16191619
}
16201620

16211621
self?.runInMainThread {
16221622
ctx.onDismiss()
16231623
}
1624-
return 1
1624+
return
16251625
}
16261626

16271627
sheet.setEscapeKeyPressedHandler {
1628-
print("escapeKeyPressed")
16291628
if ctx.interactiveDismissDisabled { return }
16301629
self.runInMainThread {
16311630
ctx.onDismiss()

0 commit comments

Comments
 (0)