From d4cefb8ba6bb43cfcbc80149f312dc8af683535d Mon Sep 17 00:00:00 2001
From: David Capello <david@igara.com>
Date: Thu, 15 Dec 2022 19:29:28 -0300
Subject: [PATCH] Fix crash double clicking a Dialog:canvas()

There were missing some setRecipient() when some messages are
converted to other kind of message (e.g. DoubleClick -> MouseDown)
---
 src/app/script/dialog_class.cpp | 4 ++++
 src/ui/combobox.cpp             | 1 +
 src/ui/int_entry.cpp            | 1 +
 src/ui/widget.cpp               | 1 +
 4 files changed, 7 insertions(+)

diff --git a/src/app/script/dialog_class.cpp b/src/app/script/dialog_class.cpp
index ecfe3d249..89585ce0a 100644
--- a/src/app/script/dialog_class.cpp
+++ b/src/app/script/dialog_class.cpp
@@ -927,6 +927,10 @@ int Dialog_canvas(lua_State* L)
 
       auto mouseCallback =
         [](lua_State* L, ui::MouseMessage* msg) {
+          ASSERT(msg->recipient());
+          if (!msg->recipient())
+            return;
+
           lua_pushinteger(L, msg->position().x - msg->recipient()->bounds().x);
           lua_setfield(L, -2, "x");
 
diff --git a/src/ui/combobox.cpp b/src/ui/combobox.cpp
index 87e65347b..d36be4832 100644
--- a/src/ui/combobox.cpp
+++ b/src/ui/combobox.cpp
@@ -538,6 +538,7 @@ bool ComboBoxEntry::onProcessMessage(Message* msg)
             kMouseDownMessage,
             *mouseMsg,
             mouseMsg->positionForDisplay(pick->display()));
+          mouseMsg2.setRecipient(pick);
           mouseMsg2.setDisplay(pick->display());
           pick->sendMessage(&mouseMsg2);
           return true;
diff --git a/src/ui/int_entry.cpp b/src/ui/int_entry.cpp
index a76915d4d..db3fc8301 100644
--- a/src/ui/int_entry.cpp
+++ b/src/ui/int_entry.cpp
@@ -98,6 +98,7 @@ bool IntEntry::onProcessMessage(Message* msg)
           MouseMessage mouseMsg2(kMouseDownMessage,
                                  *mouseMsg,
                                  mouseMsg->positionForDisplay(pick->display()));
+          mouseMsg2.setRecipient(pick);
           mouseMsg2.setDisplay(pick->display());
           pick->sendMessage(&mouseMsg2);
         }
diff --git a/src/ui/widget.cpp b/src/ui/widget.cpp
index d86d4934c..f10f4d599 100644
--- a/src/ui/widget.cpp
+++ b/src/ui/widget.cpp
@@ -1557,6 +1557,7 @@ bool Widget::onProcessMessage(Message* msg)
       MouseMessage mouseMsg2(kMouseDownMessage,
                              *mouseMsg,
                              mouseMsg->position());
+      mouseMsg2.setRecipient(this);
       mouseMsg2.setDisplay(mouseMsg->display());
       sendMessage(&mouseMsg2);
       break;