From 040307bd92509d09444715f328694d91a69f2964 Mon Sep 17 00:00:00 2001 From: Alec Murphy Date: Tue, 29 Apr 2025 14:02:59 -0400 Subject: [PATCH] Media/Themes/Umami/Theme: Check hovered/focused/mouse_down widget in reverse z-order --- Media/Themes/Umami/Theme.HC | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/Media/Themes/Umami/Theme.HC b/Media/Themes/Umami/Theme.HC index ff896ae..5a0c78c 100644 --- a/Media/Themes/Umami/Theme.HC +++ b/Media/Themes/Umami/Theme.HC @@ -1267,24 +1267,27 @@ U0 @umami_set_focused_and_hovered_widget(Window* win, I64 event) widget_is_hovered = FALSE; widgets_list = win->widget; - while (widgets_list) { - if (widgets_list->widget) { + if (widgets_list) { + // Skip to most recently created + while (widgets_list->next) + widgets_list = widgets_list->next; + // Check hovered/focused, front-to-back + while (widgets_list && !widget_is_hovered) { widget = widgets_list->widget; - x = win->x + origin_x + widget->x; - y = win->y + origin_y + widget->y; - - if (@gui_window_is_hovered(win) && @widget_is_hovered(x, y, widget)) { - win->hovered_widget = widget; - widget_is_hovered = TRUE; - } - - if (@widget_is_hovered(x, y, widget) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { - win->focused_widget = widget; - win->mouse_down_widget = widget; - break; + if (widget) { + x = win->x + origin_x + widget->x; + y = win->y + origin_y + widget->y; + if (@gui_window_is_hovered(win) && @widget_is_hovered(x, y, widget)) { + widget_is_hovered = TRUE; + win->hovered_widget = widget; + if (widget_is_hovered && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + win->focused_widget = widget; + win->mouse_down_widget = widget; + } + } } + widgets_list = widgets_list->prev; } - widgets_list = widgets_list->next; } if (!widget_is_hovered)