aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CruUI/ui/control.cpp2
-rw-r--r--CruUI/ui/control.h11
-rw-r--r--CruUI/ui/controls/text_block.cpp1
3 files changed, 13 insertions, 1 deletions
diff --git a/CruUI/ui/control.cpp b/CruUI/ui/control.cpp
index bfe3f7a7..baf18606 100644
--- a/CruUI/ui/control.cpp
+++ b/CruUI/ui/control.cpp
@@ -399,6 +399,8 @@ namespace cru {
void Control::OnMouseDownCore(MouseButtonEventArgs & args)
{
+ if (is_focus_on_pressed_ && args.GetSender() == args.GetOriginalSender())
+ RequestFocus();
is_mouse_click_valid_map_[args.GetMouseButton()] = true;
OnMouseClickBegin(args.GetMouseButton());
}
diff --git a/CruUI/ui/control.h b/CruUI/ui/control.h
index 44fbdfba..2f23fd21 100644
--- a/CruUI/ui/control.h
+++ b/CruUI/ui/control.h
@@ -142,6 +142,15 @@ namespace cru
bool HasFocus();
+ bool IsFocusOnPressed() const
+ {
+ return is_focus_on_pressed_;
+ }
+
+ void SetFocusOnPressed(const bool value)
+ {
+ is_focus_on_pressed_ = value;
+ }
//*************** region: layout ***************
@@ -329,6 +338,8 @@ namespace cru
Size desired_size_ = Size::Zero();
std::unordered_map<String, std::any> additional_properties_{};
+
+ bool is_focus_on_pressed_ = true;
};
// Find the lowest common ancestor.
diff --git a/CruUI/ui/controls/text_block.cpp b/CruUI/ui/controls/text_block.cpp
index fa5e6903..314870c5 100644
--- a/CruUI/ui/controls/text_block.cpp
+++ b/CruUI/ui/controls/text_block.cpp
@@ -139,7 +139,6 @@ namespace cru
Control::OnMouseDownCore(args);
if (is_selectable_ && args.GetMouseButton() == MouseButton::Left)
{
- RequestFocus();
selected_range_ = std::nullopt;
const auto hit_test_result = TextLayoutHitTest(text_layout_.Get(), args.GetPoint(this), true);
if (hit_test_result.has_value())