Skip to content

Commit 1734070

Browse files
authored
Merge pull request #650 from MyreMylar/fix-event-ordering
Fix event handling order of unlayered elements
2 parents 92218d8 + bb7ef80 commit 1734070

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

pygame_gui/ui_manager.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ def process_events(self, event: pygame.event.Event):
222222
sorted_layers = sorted(self.ui_group.layers(), reverse=True)
223223
for layer in sorted_layers:
224224
sprites_in_layer = self.ui_group.get_sprites_from_layer(layer)
225+
sprites_in_layer.reverse()
225226
if not sorting_consumed_event:
226227
windows_in_layer = [window for window in sprites_in_layer
227228
if 'window' in window.element_ids[-1]]
@@ -336,7 +337,9 @@ def _handle_hovering(self, time_delta):
336337
hover_handled = False
337338
sorted_layers = sorted(self.ui_group.layers(), reverse=True)
338339
for layer in sorted_layers:
339-
for ui_element in self.ui_group.get_sprites_from_layer(layer):
340+
layer_elements = self.ui_group.get_sprites_from_layer(layer)
341+
layer_elements.reverse()
342+
for ui_element in layer_elements:
340343
if ui_element.visible:
341344
# Only check hover for visible elements - ignore hidden elements
342345
# we need to check hover even after already found what we are hovering,

tests/test_elements/test_ui_scrolling_container.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -438,13 +438,13 @@ def test_are_contents_hovered(self, _init_pygame, default_ui_manager: IUIManage
438438
assert container.are_contents_hovered()
439439
assert container.vert_scroll_bar is not None
440440

441-
container.vert_scroll_bar.process_event(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5}))
441+
container.vert_scroll_bar.process_event(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5, 'x': 0.0}))
442442

443443
assert container.vert_scroll_bar.scroll_wheel_moved
444444

445445
assert container.horiz_scroll_bar is not None
446446

447-
container.horiz_scroll_bar.process_event(pygame.event.Event(pygame.MOUSEWHEEL, {'x': -0.5}))
447+
container.horiz_scroll_bar.process_event(pygame.event.Event(pygame.MOUSEWHEEL, {'x': -0.5, 'y': 0.0}))
448448

449449
assert container.horiz_scroll_bar.scroll_wheel_moved
450450

@@ -465,7 +465,7 @@ def test_scrolls_while_hovering_non_scrolling_contents(self, _init_pygame, defa
465465
assert container.are_contents_hovered()
466466
assert container.vert_scroll_bar is not None
467467

468-
manager.process_events(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5}))
468+
manager.process_events(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5, 'x': 0.0}))
469469

470470
assert container.vert_scroll_bar.scroll_wheel_moved
471471

@@ -490,7 +490,7 @@ def test_does_not_scroll_while_hovering_scrolling_contents(self, _init_pygame, d
490490
assert container.are_contents_hovered()
491491
assert container.vert_scroll_bar is not None
492492

493-
manager.process_events(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5}))
493+
manager.process_events(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5, 'x': 0.0}))
494494

495495
assert not container.vert_scroll_bar.scroll_wheel_moved
496496

@@ -513,7 +513,7 @@ def test_scroll_while_hovering_nested_contents(self, _init_pygame, default_ui_ma
513513
assert container.are_contents_hovered()
514514
assert container.vert_scroll_bar is not None
515515

516-
manager.process_events(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5}))
516+
manager.process_events(pygame.event.Event(pygame.MOUSEWHEEL, {'y': -0.5, 'x': 0.0}))
517517

518518
assert container.vert_scroll_bar.scroll_wheel_moved
519519

0 commit comments

Comments
 (0)