diff --git a/include/widgets.hpp b/include/widgets.hpp
index 3d5fc5fe..4c12fabc 100644
--- a/include/widgets.hpp
+++ b/include/widgets.hpp
@@ -273,9 +273,13 @@ struct MenuOverlay : OpaqueWidget {
Widget *onHoverKey(Vec pos, int key);
};
+struct MenuEntry;
+
struct Menu : OpaqueWidget {
Menu *parentMenu = NULL;
Menu *childMenu = NULL;
+ /** The entry which created the child menu */
+ MenuEntry *activeEntry = NULL;
Menu() {
box.size = Vec(0, 0);
@@ -304,14 +308,11 @@ struct MenuLabel : MenuEntry {
};
struct MenuItem : MenuEntry {
- BNDwidgetState state = BND_DEFAULT;
-
float computeMinWidth(NVGcontext *vg);
void draw(NVGcontext *vg);
virtual Menu *createChildMenu() {return NULL;}
void onMouseEnter();
- void onMouseLeave();
void onDragDrop(Widget *origin);
};
diff --git a/src/widgets/MenuItem.cpp b/src/widgets/MenuItem.cpp
index 31fe8d36..97967bfa 100644
--- a/src/widgets/MenuItem.cpp
+++ b/src/widgets/MenuItem.cpp
@@ -12,31 +12,36 @@ float MenuItem::computeMinWidth(NVGcontext *vg) {
}
void MenuItem::draw(NVGcontext *vg) {
+ // Get state
+ BNDwidgetState state = (gHoveredWidget == this) ? BND_HOVER : BND_DEFAULT;
+ Menu *parentMenu = dynamic_cast