DVUI

processEventsAfter

Parameters

#
self:*MenuWidget
*MenuWidget

Source

Implementation

#
pub fn processEventsAfter(self: *MenuWidget) void {
    const focus_id = dvui.lastFocusedIdInFrameSince(self.last_focus);

    const evts = dvui.events();
    for (evts) |*e| {
        if (!dvui.eventMatch(e, .{ .id = self.data().id, .focus_id = focus_id, .r = self.data().borderRectScale().r }))
            continue;

        switch (e.evt) {
            .key => |ke| {
                if (ke.action == .down or ke.action == .repeat) {
                    switch (ke.code) {
                        .escape => {
                            e.handle(@src(), self.data());
                            self.close();
                        },
                        .up, .down => {
                            if (self.init_opts.dir == .horizontal) {
                                e.handle(@src(), self.data());
                            }
                            // otherwise let focus group handle it
                        },
                        .left => {
                            if (self.init_opts.dir == .vertical) {
                                e.handle(@src(), self.data());
                                if (self.parentMenu) |pm| {
                                    e.handle(@src(), self.data());
                                    pm.submenus_activated = false;
                                    if (self.init_opts.parentSubwindowId) |sid| {
                                        dvui.focusSubwindow(sid, null);
                                    }
                                }
                            }
                            // otherwise let focus group handle it
                        },
                        .right => {
                            if (self.init_opts.dir == .vertical) {
                                e.handle(@src(), self.data());
                            }
                            // otherwise let focus group handle it
                        },
                        else => {},
                    }
                }
            },
            else => {},
        }
    }
}