aboutsummaryrefslogtreecommitdiff
path: root/src/ui/controls
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-16 17:48:39 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-16 17:48:39 +0800
commitb68f9f52a3ecdd8e379dd60ac1c1366e76695464 (patch)
tree3b863e4f68ffcc0e8556b68ae3176043393f558e /src/ui/controls
parent1ce8866e5b88da6cc4b7cd4d3440f7d70c7be5db (diff)
downloadcru-b68f9f52a3ecdd8e379dd60ac1c1366e76695464.tar.gz
cru-b68f9f52a3ecdd8e379dd60ac1c1366e76695464.tar.bz2
cru-b68f9f52a3ecdd8e379dd60ac1c1366e76695464.zip
Fix delete later related things.
Diffstat (limited to 'src/ui/controls')
-rw-r--r--src/ui/controls/Control.cpp5
-rw-r--r--src/ui/controls/TextHostControlService.cpp4
2 files changed, 7 insertions, 2 deletions
diff --git a/src/ui/controls/Control.cpp b/src/ui/controls/Control.cpp
index cf0cc11f..93213ecf 100644
--- a/src/ui/controls/Control.cpp
+++ b/src/ui/controls/Control.cpp
@@ -27,6 +27,11 @@ Control::Control() {
}
Control::~Control() {
+ if (host::WindowHost::IsInEventHandling()) {
+ // Don't delete control during event handling. Use DeleteLater.
+ std::terminate();
+ }
+
in_destruction_ = true;
RemoveFromParent();
}
diff --git a/src/ui/controls/TextHostControlService.cpp b/src/ui/controls/TextHostControlService.cpp
index 06c1651f..99090951 100644
--- a/src/ui/controls/TextHostControlService.cpp
+++ b/src/ui/controls/TextHostControlService.cpp
@@ -148,8 +148,7 @@ std::vector<TextControlMovePattern> TextControlMovePattern::kDefaultPatterns = {
TextHostControlService::TextHostControlService(Control* control)
: control_(control),
- text_host_control_(dynamic_cast<ITextHostControl*>(control)),
- context_menu_(new components::PopupMenu()) {
+ text_host_control_(dynamic_cast<ITextHostControl*>(control)) {
SetUpShortcuts();
SetupOneHandler(&Control::MouseMoveEvent,
@@ -701,6 +700,7 @@ void TextHostControlService::SetUpShortcuts() {
void TextHostControlService::OpenContextMenu(const Point& position,
ContextMenuItem items) {
CRU_LOG_TAG_DEBUG("Open context menu.");
+ context_menu_.reset(new components::PopupMenu());
auto menu = context_menu_->GetMenu();
menu->ClearItems();
if (items & ContextMenuItem::kSelectAll) {