DVUI

deinit

Parameters

#
self:*MenuWidget
*MenuWidget

Source

Implementation

#
pub fn deinit(self: *MenuWidget) void {
    self.processEventsAfter();

    if (self.group.data().id == dvui.focusedWidgetIdInCurrentSubwindow()) {
        self.focused_menuItem_this_frame = true;
    }

    // This prevents the following:
    // * click to open a menu
    // * click outside the menu, it closes
    // * hover back over a menu item (the menu should not reappear without clicking)
    if (self.init_opts.close_without_focused_child and !self.focused_menuItem_this_frame) {
        self.submenus_activated = false;
    }

    defer if (dvui.widgetIsAllocated(self)) dvui.widgetFree(self);
    defer self.* = undefined;
    self.box.deinit();
    self.group.deinit();
    dvui.dataSet(null, self.data().id, "_mouse_mode", self.mouse_mode);
    dvui.dataSet(null, self.data().id, "_sub_act", self.submenus_activated);
    dvui.dataSet(null, self.data().id, "_has_focused_menuItem", self.focused_menuItem_this_frame);
    // always overwrite with value from this frame to prevent saving stale value
    dvui.dataSet(null, self.data().id, "_child_popup", self.child_popup_rect);
    self.data().minSizeSetAndRefresh();
    self.data().minSizeReportToParent();
    _ = menuSet(self.parentMenu);
    dvui.parentReset(self.data().id, self.data().parent);
}