fix focus locking bug

This commit is contained in:
IlyaShurupov 2024-11-05 19:30:02 +03:00
parent c82ad3c150
commit 1bbce78a2e
8 changed files with 33 additions and 20 deletions

View file

@ -31,6 +31,8 @@ namespace tp {
using DFSAction = std::function<void(Widget*)>;
protected:
enum Flags : int1 {
ENABLED = 0,
NEEDS_UPDATE,

View file

@ -87,7 +87,7 @@ namespace tp {
bool mDebug = false;
bool mDebugStopProcessing = false;
bool mDebugRedrawAlways = false;
bool mDetailed = false;
bool mDetailed = true;
std::set<Widget*> mProcBreakpoints;
std::set<Widget*> mLayBreakpoints;

View file

@ -25,13 +25,16 @@ namespace tp {
void clean();
void updateTreeToProcess(Widget* root);
void handleFocusChanges(Widget* root, EventHandler& events);
void handleFocusChanges(Widget* active, Widget* prevActive);
Widget* findFocusWidget(Widget* root, EventHandler& events);
void findFocusWidget(Widget* iter, Widget** focus, const Vec2F& pointer);
void findMouseFocusWidget(Widget* iter, Widget** focus, const Vec2F& pointer);
static void getWidgetPath(Widget* widget, std::vector<Widget*>& out);
void processActiveTree(Widget* iter, EventHandler& events, Vec2F pos);
void processFocusItems(EventHandler& events);
Widget* getFocusWidget() { return mInFocusWidget; }
private:
static void procWidget(Widget* widget, EventHandler& events, bool withEvents = false);