Move callback_newmenu handling into event_handler

This commit is contained in:
Kp 2021-06-28 03:37:50 +00:00
parent cfb75c221f
commit 55ea87ca3f

View file

@ -80,6 +80,7 @@ struct callback_newmenu : newmenu
const subfunction_type subfunction; const subfunction_type subfunction;
void *const userdata; // For whatever - like with window system void *const userdata; // For whatever - like with window system
virtual int subfunction_handler(const d_event &event) override; virtual int subfunction_handler(const d_event &event) override;
virtual window_event_result event_handler(const d_event &) override;
}; };
struct step_down struct step_down
@ -158,9 +159,27 @@ newmenu_layout::adjusted_citem newmenu_layout::adjusted_citem::create(const part
int callback_newmenu::subfunction_handler(const d_event &event) int callback_newmenu::subfunction_handler(const d_event &event)
{ {
if (!subfunction) (void)event;
return 0; return 0;
return (*subfunction)(this, event, userdata); }
window_event_result callback_newmenu::event_handler(const d_event &event)
{
if (subfunction)
{
const auto rval = (*subfunction)(this, event, userdata);
if (rval)
{
if (rval < -1)
{
if (this->rval)
*this->rval = rval;
return window_event_result::close;
}
return window_event_result::handled; // event handled
}
}
return newmenu::event_handler(event);
} }
} }
@ -1602,27 +1621,6 @@ window_event_result newmenu::event_handler(const d_event &event)
return window_event_result::handled; return window_event_result::handled;
#endif #endif
{
const auto rval = subfunction_handler(event);
#if 0 // No current instances of the subfunction closing the window itself (which is preferred)
// Enable when all subfunctions return a window_event_result
if (rval == window_event_result::deleted)
return rval; // some subfunction closed the window: bail!
#endif
if (rval)
{
if (rval < -1)
{
if (this->rval)
*this->rval = rval;
return window_event_result::close;
}
return window_event_result::handled; // event handled
}
}
switch (event.type) switch (event.type)
{ {
case EVENT_WINDOW_ACTIVATED: case EVENT_WINDOW_ACTIVATED: