Skip to content

Commit 887deee

Browse files
committed
feat: added EventBus.removeAllEventHandlers, #1160
1 parent 3eff0db commit 887deee

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

fxgl-core/src/main/kotlin/com/almasb/fxgl/event/EventBus.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class EventBus {
2424

2525
private val eventHandlers = Group()
2626

27+
private val subscribers = arrayListOf<Subscriber>()
28+
2729
var isLoggingEnabled = true
2830

2931
/**
@@ -33,7 +35,7 @@ class EventBus {
3335
eventHandlers.addEventHandler(eventType, eventHandler)
3436

3537
@Suppress("UNCHECKED_CAST")
36-
return Subscriber(this, eventType, eventHandler as EventHandler<in Event>)
38+
return Subscriber(this, eventType, eventHandler as EventHandler<in Event>).also { subscribers.add(it) }
3739
}
3840

3941
/**
@@ -43,6 +45,13 @@ class EventBus {
4345
eventHandlers.removeEventHandler(eventType, eventHandler)
4446
}
4547

48+
fun removeAllEventHandlers() {
49+
// some of these may have already been unsubscribed, either via [removeEventHandler] or [unsubscribe],
50+
// but given the following is a no-op when not subscribed, there is no need to update the list
51+
subscribers.forEach { it.unsubscribe() }
52+
subscribers.clear()
53+
}
54+
4655
/**
4756
* Fire given [event].
4857
* All listening parties will be notified.

fxgl-core/src/test/kotlin/com/almasb/fxgl/event/EventBusTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ class EventBusTest {
6565

6666
eventBus.fireEvent(Event(EventType.ROOT))
6767

68+
assertThat(count, `is`(2))
69+
},
70+
71+
Executable {
72+
// add again and remove, but this time using removeAll
73+
eventBus.addEventHandler(EventType.ROOT, handler)
74+
75+
eventBus.removeAllEventHandlers()
76+
77+
eventBus.fireEvent(Event(EventType.ROOT))
78+
6879
assertThat(count, `is`(2))
6980
}
7081
)

0 commit comments

Comments
 (0)