aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-16 14:09:50 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-16 14:09:50 +0800
commit07d662aafc25b145eb20e4123ebc82b5736cdeb7 (patch)
tree0b94baddd3235623beac4997ac09a503a00645e7 /src/ui
parentfaf73c4af74bdae1abf394a33b573149b98ec2b1 (diff)
downloadcru-07d662aafc25b145eb20e4123ebc82b5736cdeb7.tar.gz
cru-07d662aafc25b145eb20e4123ebc82b5736cdeb7.tar.bz2
cru-07d662aafc25b145eb20e4123ebc82b5736cdeb7.zip
New timer impl on Windows. Add Event test. Fix delete later.
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/DeleteLater.cpp7
-rw-r--r--src/ui/controls/Control.cpp5
-rw-r--r--src/ui/controls/TextHostControlService.cpp6
3 files changed, 10 insertions, 8 deletions
diff --git a/src/ui/DeleteLater.cpp b/src/ui/DeleteLater.cpp
index 499b9b34..27ec2155 100644
--- a/src/ui/DeleteLater.cpp
+++ b/src/ui/DeleteLater.cpp
@@ -1,16 +1,21 @@
#include "cru/ui/DeleteLater.h"
#include "Helper.h"
+#include "cru/base/log/Logger.h"
#include "cru/platform/gui/UiApplication.h"
namespace cru::ui {
DeleteLaterImpl::DeleteLaterImpl() : delete_later_scheduled_(false) {}
-DeleteLaterImpl::~DeleteLaterImpl() {}
+DeleteLaterImpl::~DeleteLaterImpl() {
+ CRU_LOG_TAG_DEBUG("Delete later object being deleted {}.",
+ static_cast<void*>(this));
+}
void DeleteLaterImpl::DeleteLater() {
if (!delete_later_scheduled_) {
+ CRU_LOG_TAG_DEBUG("Schedule delete later {}.", static_cast<void*>(this));
GetUiApplication()->SetImmediate([this] { delete this; });
delete_later_scheduled_ = true;
}
diff --git a/src/ui/controls/Control.cpp b/src/ui/controls/Control.cpp
index 3218f185..14397fa7 100644
--- a/src/ui/controls/Control.cpp
+++ b/src/ui/controls/Control.cpp
@@ -1,10 +1,8 @@
#include "cru/ui/controls/Control.h"
-#include "cru/base/log/Logger.h"
#include "cru/platform/gui/Cursor.h"
#include "cru/platform/gui/UiApplication.h"
#include "cru/ui/host/WindowHost.h"
-#include "cru/ui/render/RenderObject.h"
#include "cru/ui/style/StyleRuleSet.h"
namespace cru::ui::controls {
@@ -30,8 +28,7 @@ Control::Control() {
Control::~Control() {
if (host::WindowHost::IsInEventHandling()) {
- CRU_LOG_TAG_ERROR(
- "Control destroyed during event handling. Please use DeleteLater.");
+ std::terminate();
}
in_destruction_ = true;
diff --git a/src/ui/controls/TextHostControlService.cpp b/src/ui/controls/TextHostControlService.cpp
index 235e6e6a..f581d3c9 100644
--- a/src/ui/controls/TextHostControlService.cpp
+++ b/src/ui/controls/TextHostControlService.cpp
@@ -12,7 +12,6 @@
#include "cru/platform/gui/Window.h"
#include "cru/ui/Base.h"
#include "cru/ui/DebugFlags.h"
-#include "cru/ui/DeleteLater.h"
#include "cru/ui/components/Menu.h"
#include "cru/ui/helper/ShortcutHub.h"
#include "cru/ui/host/WindowHost.h"
@@ -149,7 +148,8 @@ std::vector<TextControlMovePattern> TextControlMovePattern::kDefaultPatterns = {
TextHostControlService::TextHostControlService(Control* control)
: control_(control),
- text_host_control_(dynamic_cast<ITextHostControl*>(control)) {
+ text_host_control_(dynamic_cast<ITextHostControl*>(control)),
+ context_menu_(new components::PopupMenu()) {
SetUpShortcuts();
SetupOneHandler(&Control::MouseMoveEvent,
@@ -699,7 +699,7 @@ void TextHostControlService::SetUpShortcuts() {
void TextHostControlService::OpenContextMenu(const Point& position,
ContextMenuItem items) {
- context_menu_ = MakeDeleteLater<components::PopupMenu>();
+ CRU_LOG_TAG_DEBUG("Open context menu.");
auto menu = context_menu_->GetMenu();
if (items & ContextMenuItem::kSelectAll) {
menu->AddTextItem("Select All", [this] { this->SelectAll(); });