From 1d9f14665f34acb1219b8d908439e21f7d0884fa Mon Sep 17 00:00:00 2001 From: David Capello Date: Wed, 20 Mar 2024 20:22:11 -0300 Subject: [PATCH] New ui::FocusMessage with oldFocus/newFocus fields --- src/ui/manager.cpp | 9 +++++++-- src/ui/message.h | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/ui/manager.cpp b/src/ui/manager.cpp index b08aa9950..eb4e69606 100644 --- a/src/ui/manager.cpp +++ b/src/ui/manager.cpp @@ -964,10 +964,13 @@ void Manager::setFocus(Widget* widget) && !(widget->hasFlags(DECORATIVE)) && someParentIsFocusStop(widget)))) { Widget* commonAncestor = findLowestCommonAncestor(focus_widget, widget); + Widget* oldFocus = focus_widget; // Fetch the focus if (focus_widget && focus_widget != commonAncestor) { - auto msg = new Message(kFocusLeaveMessage); + auto* msg = new FocusMessage(kFocusLeaveMessage, + oldFocus, + widget); msg->setRecipient(focus_widget); msg->setPropagateToParent(true); msg->setCommonAncestor(commonAncestor); @@ -984,7 +987,9 @@ void Manager::setFocus(Widget* widget) // Put the focus focus_widget = widget; if (widget) { - auto msg = new Message(kFocusEnterMessage); + auto* msg = new FocusMessage(kFocusEnterMessage, + oldFocus, + widget); msg->setRecipient(widget); msg->setPropagateToParent(true); msg->setCommonAncestor(commonAncestor); diff --git a/src/ui/message.h b/src/ui/message.h index 81533114c..c061740ee 100644 --- a/src/ui/message.h +++ b/src/ui/message.h @@ -1,5 +1,5 @@ // Aseprite UI Library -// Copyright (C) 2018-2023 Igara Studio S.A. +// Copyright (C) 2018-2024 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This file is released under the terms of the MIT license. @@ -96,6 +96,21 @@ namespace ui { std::function m_callback; }; + class FocusMessage : public Message { + public: + FocusMessage(MessageType type, + Widget* oldFocus, + Widget* newFocus) + : Message(type) + , m_oldFocus(oldFocus) + , m_newFocus(newFocus) { } + Widget* oldFocus() { return m_oldFocus; } + Widget* newFocus() { return m_newFocus; } + private: + Widget* m_oldFocus; + Widget* m_newFocus; + }; + class KeyMessage : public Message { public: KeyMessage(MessageType type,