record and replay control focus events

This commit is contained in:
2024-07-05 13:23:21 -06:00
committed by Celtic Minstrel
parent 948bb7b525
commit bf724951c5
2 changed files with 14 additions and 0 deletions

View File

@@ -9,6 +9,7 @@
#include <cmath>
#include <stdexcept>
#include <functional>
#include <sstream>
#include "dialog.hpp"
#include "gfx/tiling.hpp" // for bg
#include "fileio/resmgr/res_dialog.hpp"
@@ -541,6 +542,13 @@ void cDialog::handle_events() {
auto info = info_from_action(next_action);
eKeyMod mods = static_cast<eKeyMod>(atoi(info["mods"].c_str()));
controls[info["id"]]->triggerClickHandler(*this, info["id"], mods);
}else if(next_action_type() == "control_focus"){
Element* next_action = pop_next_action();
auto info = info_from_action(next_action);
bool losing;
istringstream sstr(info["losing"]);
sstr >> losing;
controls[info["id"]]->triggerFocusHandler(*this, info["id"], losing);
}
}else{
while(win.pollEvent(currentEvent)) handle_one_event(currentEvent);

View File

@@ -359,6 +359,12 @@ bool cControl::triggerClickHandler(cDialog& dlg, std::string id, eKeyMod mods){
}
bool cControl::triggerFocusHandler(cDialog& dlg, std::string id, bool losing){
if(recording){
std::stringstream sstr;
sstr << losing;
std::map<std::string, std::string> action_info = {{"id", id}, {"losing", sstr.str()}};
record_action("control_focus", action_info);
}
if(losing) return triggerEvent<EVT_DEFOCUS>(dlg, id);
triggerEvent<EVT_FOCUS>(dlg, id);
return true;